1. 條件判斷的陷阱
在if判斷中,使用===
作比較,避免掉入==
造成的陷阱坛增。
在條件判斷時获雕,這樣的一些值表示false
:null
,undefined
收捣,字符串' '
届案,數(shù)字0
,NaN
而在==
時罢艾,則會有一些讓人難以理解的陷阱,如:
(function () {
var undefined;
undefined == null; // true
1 == true; //true
2 == true; // false
0 == false; // true
0 == ''; // true
NaN == NaN;// false
[] == false; // true
[] == ![]; // true
})();
對于不同類型的 ==
判斷楣颠,有這樣一些規(guī)則,順序自上而下:
-
undefined
與null
相等 - 一個是
number
一個是string
時咐蚯,會嘗試將string
轉(zhuǎn)換為number
- 嘗試將
boolean
轉(zhuǎn)換為number
童漩,0
或1
- 嘗試將
Object
轉(zhuǎn)換成number
或string
,取決于另外一個對比量的類型
所以仓蛆,對于0
睁冬、空字符串的判斷,建議使用===
看疙。===
會先判斷兩邊的值類型豆拨,類型不匹配時為false
。
2. 簡單類型轉(zhuǎn)換
- number to string的轉(zhuǎn)換能庆,建議使用
1 + ' '
或String(1)
施禾,不使用new String(1)
或1.toString()
的方式。 - string to number的轉(zhuǎn)換搁胆,建議使用
parseInt
弥搞,必須顯式指定第二個參數(shù)的進制邮绿。下面的例子展示了不指定進制的風險:
parseInt('08'); // 0
parseInt('08', 10); //8
- float to integer的轉(zhuǎn)換,建議使用
Math.floor/Math.round/Math.ceil
方法攀例,不使用parseInt
船逮。
3. 字符串拼接
字符串拼接,應使用數(shù)組保存字符串片段粤铭,使用時調(diào)用join
方法挖胃。避免使用+
或+=
的方式拼接較長的字符串,每個字符串都會使用一個小的內(nèi)存片段梆惯,過多的內(nèi)存片段會影響性能酱鸭。如:
不好的拼接方式,+=
var str = '';
for (var i = 0, len = list.length; i < len; i++) {
str+= '<div>' + list[i] + '</div>';
}
dom.innerHTML = str;
正確拼接方式垛吗,Array的push+join
var str = [];
for (var i = 0, len = list.length; i < len; i++) {
str.push('<div>'+ list[i] + '</div>');
}
dom.innerHTML = str.join('');
4. 獲取元素
獲取單個元素
通常凹髓,我們使用document.getElementById
來獲取dom元素,避免使用document.all
怯屉。document.getElementById
是標準方法蔚舀,兼容所有瀏覽器
ie瀏覽器會混淆元素的id
和name
屬性,document.getElementById
可能獲得不期望的元素蚀之。
在對元素的id
與name
屬性的命名需要非常小心蝗敢,應使用不同的命名法。
下面是一個name
與id
沖突的例子:
<input type="text" name="test"> <div id="test"></div>
<button onclick="alert(document.getElementById('test').tagName)"></button>
<!-- ie6下為INPUT -->
5.設置兼容事件
//設置兼容事件
function addEvent(ele, event, func) {
if (ele.addEventListener) {
ele.addEventListener(event, func, false);
} else if (ele.attachEvent) {
ele.attachEvent('on' + event, func);
} else {
ele['on' + event] = func;
}
}