JavaScript中的null在其他編程語言中也很常見,但是JavaScript在設計的過程中null自動轉換為0,為了更好表示空,這個時候undefined出現了,null通過typeof結果是“object”,undefined通過typeof表示這個值是這個類型的唯一成員。null和undefined中都是表示值的空缺,不過兩者當做布爾值時都是false,通過==的時候都是相等的,但是null和undefined分別字符串,數字,布爾值相比都是false。
Null和Undefined區別
JavaScript取值為null的情況有兩種:
//獲取不到元素
1.var notExist= document.getElementById('notExist');//null
//原型鏈的終點,也是返回null的
2.Object.getPrototypeOf(Object.prototype)//null
undefined的情況如下:
①變量聲明,未賦值;
var a;//undefined
②查詢對象的屬性或數組元素的值不存在時,返回undefined;
var arr=[1,2,3];//博客園-FlyElephant
console.log(arr[5]);//undefined
③函數沒有任何返回值的時候返回undefined;
function f(){};console.log(f());//undefined
④引用沒有提供實參的函數形參的值會得到undefined:
function f(x){console.log(x);}f();//undefined
題外話
以前有一個很經典的JavaScript問題:
if (!("a" in window)) {
var a = 1;
}
console.log(a);//博客園-FlyElephant
最後輸出的是undefined,其中a是可以訪問的,所有的聲明都是提前聲明的,a最開始的定義值是undefined,"a" in window是真,因此賦值語句沒法執行到,最後的執行結果是undefined;