深入學習JavaScript系列學習筆記(一)——你所不知道的JS基礎

1、最小全局變量

全局變量:在任何函數內部聲明或未聲明而直接使用的變量。

全局對象:在任何函數的外部可以使用this訪問,window指向該全局對象。

全局變量是全局對象的屬性。

2、全局變量的問題

由於頁面中常含引入的第三方文件,故可能存在命名衝突的問題,導致先定義的變量被覆蓋。

不使用var聲明的變量會隱含成爲全局變量,如:result = 0;

避免出現全局變量命名衝突的辦法是儘量使用var對變量進行聲明,

可以使用鏈分配:var a,b; 但不要使用任務鏈:var a=b=0;該寫法會導致b成爲隱式全局變量。

3、var聲明的全局變量與隱式全局變量的區別

var聲明的全局變量不能通過delete global_var 刪除;

隱式全局變量可以通過delete 進行刪除。

4、訪問全局對象

可在任何層級的函數作用域中訪問全局對象:

var global = (function () {
   return this;
}());

5、避免全局變量命名衝突的方法

單var模式

function func() {
   var a = 1,
       b = 2,
       sum = a + b,
       myobject = {},
       i,
       j;
   // function body...
}

初始化變量同時初始化值的做法是很好的。

當使用DOM(文檔對象模型)引用時,可以使用單一的var把DOM引用一起指定爲局部變量,就如下面代碼所示:

function updateElement() {
   var el = document.getElementById("result"),
       style = el.style;
   // 使用el和style乾點其他什麼事...
}

6、var聲明提升

// 反例
myname = "global"; // 全局變量
function func() {
    alert(myname); // "undefined"
    var myname = "local";
    alert(myname); // "local"
}
func();

所有的變量聲明會被懸置到函數的頂部,爲了避免這種混亂,最好是預先聲明你想使用的全部變量。

7、for循環

當你循環獲取值時,緩存數組(或集合)的長度是比較好的形式

for (var i = 0, max = myarray.length; i < max; i++) {
   // 使用myarray[i]做點什麼
}

8、for-in循環

for-in循環應該用在非數組對象的遍歷上,使用for-in進行循環也被稱爲“枚舉”

hasOwnProperty()方法,當遍歷對象屬性的時候可以過濾掉從原型鏈上下來的屬性

待補充

9、避免擴增構造函數的prototype屬性

增加內置的構造函數原型會嚴重降低了可維護性,除非確保滿足以下原則:

待補充

10、switch模式

case以break清楚結束

避免貫穿

11、避免隱式類型轉換

==與===的區別

12、避免使用eval()

eval()存在安全隱患,被執行的代碼可能已經被篡改

如果你絕對必須使用eval(),你 可以考慮使用new Function()代替。

另一種方法來阻止自動全局變量是封裝eval()調用到一個即時函數中

13、parseInt的使用

在ECMAScript 3中,開頭爲”0″的字符串被當做8進制處理了,但這已在ECMAScript 5中改變了。爲了避免矛盾和意外的結果,總是指定基數參數。

var month = "06",
    year = "09";
month = parseInt(month, 10);
year = parseInt(year, 10);

此例中,如果你忽略了基數參數,如parseInt(year),返回的值將是0,因爲“09”被當做8進制(好比執行 parseInt( year, 8 )),而09在8進制中不是個有效數字。替換方法是將字符串轉換成數字,包括:

+"08" // 結果是 8
Number("08") // 8

14、縮進、花括號等相關使用

15、命名規範

以大寫首字母寫構造函數

駝峯命名法

常數:字母全大寫

使用一個下劃線前綴來表示一個私有屬性或方法

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章