我剛開始學習JavaScript的時候
就覺得undefined挺新鮮
因為其他語言沒有
而且不只有undefined,居然還有一個表示空的null
我相信很多同學都說不出來undefined與null有什麼區別
今天我就總結一下JavaScript中表示空的undefined與null的區別
undefined和null都是JavaScript中的基本型別
而且它們的型別值各只有一個,就是undefined和null,與它們的型別同名
正常來說,這兩個值看起來還真沒什麼差別
var foo = undefined;
var foo = null;
#而且標準還有這樣的規定
console.log(null == undefined) // true
(但是null !== undefined
)
轉換為布林值都是false
if(!undefined){ console.log(1);//1}if(!null){ console.log(1);//1}
但其實,有差別
先來看看這幾行程式碼
console.log(undefined in window);// trueconsole.log(null in window);// false
這是其中不同的一點
null是JavaScript的關鍵字
而undefined是window上的一個特殊的的屬性(和NaN、Infinity一樣)
雖然ES5undefined變成只讀屬性,但是仍然有不合理的地方,比如說這樣
function fn(){ var undefined = 1;// 注意:前方高能 console.log(undefined);// 1} fn();
看吧,因為undefined不是關鍵字,所以我們可以在局部變數中宣告undefined(簡直無語)
即便你是嚴格模式
function fn(){ "use strict"; var undefined = 1; console.log(undefined);// 1} fn();
我們可千萬不要寫這麼令人髮指的程式碼
在進行數學運算時也存在差異
console.log(undefined + 1); //NaNconsole.log(null + 1); //1
undefined進行任何運算會轉換為NaN
而null轉換為0
JavaScript有兩種表示空的值是有道理的
js之父Brendan Eich最開始設計得時候像Java一樣,只有null
但是他考慮到js有基本值和引用值兩種
用一個物件來表示空怪怪的typeof null === 'object'
,而且null轉換為數字0導致很多bug不好找
於是他又設計了undefined
#依照js之父的設計
undefined表示缺少值
null表示為空物件
但是現在我們並不是這樣使用的
#可以這樣來理解
undefined表示變數沒有初始化,沒有值
null表示變數初始化了,值為「空值」
undefined是js用的,而null是給我們用的
這句話不知道大家能不能理解
例如在這些情況
var a;
宣告變量,引擎會在預編譯給它賦上預設值undefined
function a(){}
宣告函數,沒有回傳值預設回傳undefined
var obj = {};obj.a;
存取不存在的物件屬性,預設值undefined
#var a = function(a){};a();
沒有指定實參,預設參數值undefined
…
這都是系統給我們預設的undefined,也就是js使用的
而我們要用的是null
比如說
var obj = Object.create(null);
建立空物件
#demo.onclick = null;
解除綁定事件
#……
只要我們想要使用空,就用null肯定沒錯,某些情況還可以方便瀏覽器的垃圾回收
#最後給大家總結一下
undefined是window上的特殊屬性,是標識符,可以賦值;null是特殊關鍵字,不是標識符,不能賦值
undefined == null –> true | undefined = == null –> false
undefined轉換為number為NaN,null轉換為number為0
undefined與null轉換為boolean都是false
undefined表示沒有值,null表示空值
我們應該使用null表示空而不要使用undefined
永遠不要重定義undefined
以上就是JavaScript中表示空的undefined與null的區別及用法的內容,更多相關內容請關注PHP中文網(www.php.cn)!