undefined 與 null 都是 JavaScript 的基本數(shù)據(jù)類型拳球,在轉(zhuǎn)換為 Boolean 類型時也都會轉(zhuǎn)換為 false秘遏。它們有什么區(qū)別呢传藏?
1.null 是一個表示「無」的對象乾忱,轉(zhuǎn)為數(shù)值時為 0限匣;undefined 是一個表示「無」的原始值抖苦,轉(zhuǎn)為數(shù)值時為 NaN。
Number(null); // 0
null == 0; // false
Number(undefined); // NaN
typeof null; // "object"
typeof undefined; // "undefined"
2.undefined 是全局對象(window)的一個屬性米死。
當(dāng)我們將一個變量或值與 undefined 比較時锌历,實際上是與 window 對象的 undefined 屬性比較。這個比較過程中哲身,JavaScript 會搜索 window 對象名叫 undefined 的屬性辩涝,然后再比較兩個操作數(shù)的引用指針是否相同。
由于 window 對象的屬性值非常多勘天,在每一次與 undefined 的比較中怔揩,搜索 window 對象的 undefined 屬性都會花費時間。在需要頻繁與 undefined 進行比較的函數(shù)中脯丝,這可能會是一個性能問題點商膊。因此,在這種情況下宠进,我們可以自行定義一個局部的 undefined 變量晕拆,來加快對 undefined 的比較速度。
function (){
var undefined;
...
if (x === undefined){
...
}
}
3.如何檢測 undefined 與 null
var a = undefined, b = null;
a === undefined; // true
typeof a === "undefined"; // true
b === null; // true
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
4.返回 undefined 與 null 的不同情況
undefined:
(1)訪問聲明時未提供初始值的變量
(2)訪問不存在的數(shù)組項或?qū)ο髮傩?br>
(3)省略了函數(shù)返回語句的函數(shù)材蹬,返回 undefined
(4)函數(shù)中本應(yīng)提供但沒有提供的參數(shù)实幕,值為 undefined
(5)全局變量的屬性
null:
(1)不存在的 DOM
(2)垃圾回收
總而言之,undefined 是一個意料之外的空值堤器,null 是一個意料之中的空值昆庇。
參考:
http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html
http://blog.csdn.net/leadzen/article/details/3899392
http://stackoverflow.com/questions/5101948/javascript-checking-for-null-vs-undefined-and-difference-between-and
https://leohxj.gitbooks.io/front-end-database/content/javascript-basic/difference-between-undefined-and-null.html