1.常規的解釋,null是個對象,表示空值,undefined也是個對象,表示沒有定義
2.詳細分析
null
書上的解釋(Javascript權威指南),Javascript的關鍵詞null是一種特殊的值,它表示“無值”。null常常被看作對象類型的一個特殊值,即代表“無對象”的值。如果一個變量的值為null,那么你就會知道它的值不是有效的對象、數組、數字、字符串和布爾值。null對應類型object,布爾值false,數字0,字符串“null”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
var
test =
null
;
//類型,輸出object
document.write(
typeof
(test));
document.write(
"<br/>"
);
//字符串,輸出nulltest
document.write(test +
'test'
);
document.write(
"<br/>"
);
//數字,輸出10
document.write(test + 10);
document.write(
"<br/>"
);
//布爾值,輸出false
if
(test) {
document.write(
"true"
);
}
if
(!test) {
document.write(
"false"
);
}
|
什么情況下會返回null
document.getElementById(‘XXX’); 尋找一個不存在的元素,返回null
undefined
undefined是window對象的一個屬性,且不是關鍵詞。書上解釋,當你使用了一個並未聲明的變量時,或者使用了已經聲明但還沒有賦值的變量時,又或者使用了一個並不存在的對象屬性時,返回的就是這個值。undefined對應類型undefined,布爾型false,字符串undefined,數字計算結果一定是NaN
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
var
test;
//類型,輸出undefined
document.write(
typeof
(test));
document.write(
"<br/>"
);
//字符串,輸出undefinedtest
document.write(test +
'test'
);
document.write(
"<br/>"
);
//數字,輸出NaN
document.write(test + 10);
document.write(
"<br/>"
);
//布爾值,輸出false
if
(test) {
document.write(
"true"
);
}
if
(!test) {
document.write(
"false"
);
}
|
什么情況下會返回undefined,有人總結了如下幾種場景
1. 直接訪問沒有修改的全局變量undefined,var x = undefined 那x的值為undefined
2. 使用沒有聲明的變量,在IE下出錯,提示”xxx”未定義;已經聲明,沒有賦值,類似var x; alert(x); 彈出undefined
3. 使用了一個不存在的對象的屬性
1
2
3
4
5
|
var
coffee = {
x:
'1'
,
y:2
}
alert(coffee.z);
|
上面有提到過undefined不是javascript的關鍵詞,所以可以定義一個名字為undefined的變量,如下
1
2
3
4
5
|
var
undefined = 10;
document.write(
typeof
(undefined));
document.write(
"<br/>"
)
document.write(undefined * 10);
|
在IE和搜狗瀏覽器下,返回結果 number 100
在firefox和chrome下,返回結果 undefined NaN
所以最好不要使用undefined的變量名
使用undefined的一個場景
在某個場景中經常要用到undefined,最好定義一個變量類似
var x = undefined,可以提高性能。這是因為javascript引擎在使用undefined的時候都是遍歷window對象,尋找undefined屬性,遍歷屬性過程中會造成大量的時間。
null和undefined的比較
null == undefined 返回true
null===undefined 返回false
對 undefined 的優化
當我們在程序中使用 undefined 時,實際使用的是 window 對象的 undefined 屬性,由於 window 對象的屬性很多,在每一次與 undefined交時,搜索 window 對象的 undefined 屬性都會花費時間。在需要經常使用 undefined 的場景中,可以定義一個局部的 undefined 變量。
例如:var undefined;
最后引用淘寶玉伯對null和undefined的解釋
值類型的“虛無”用undefined,引用類型的“虛無”,用null。