了解undefined、null、NaN的區別


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

undefinedwindow對象的一個屬性,且不是關鍵詞。書上解釋,當你使用了一個並未聲明的變量時,或者使用了已經聲明但還沒有賦值的變量時,又或者使用了一個並不存在的對象屬性時,返回的就是這個值。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.    直接訪問沒有修改的全局變量undefinedvar 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

firefoxchrome下,返回結果  undefined         NaN

所以最好不要使用undefined的變量名

 

使用undefined的一個場景

在某個場景中經常要用到undefined,最好定義一個變量類似

var x = undefined,可以提高性能。這是因為javascript引擎在使用undefined的時候都是遍歷window對象,尋找undefined屬性,遍歷屬性過程中會造成大量的時間。

 

nullundefined的比較

null == undefined 返回true

null===undefined  返回false

 

對 undefined 的優化

當我們在程序中使用 undefined 時,實際使用的是 window 對象的 undefined 屬性,由於 window 對象的屬性很多,在每一次與 undefined交時,搜索 window 對象的 undefined 屬性都會花費時間。在需要經常使用 undefined 的場景中,可以定義一個局部的 undefined 變量。

例如:var undefined;

 

最后引用淘寶玉伯對nullundefined的解釋

值類型的“虛無”用undefined,引用類型的“虛無”,用null

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM