1. 程式人生 > >神奇的null和undefined

神奇的null和undefined

不包含 null 選擇 alert 兩個 例子 設計 mage scrip

在JavaScript中,有兩個特殊的類型存在,它們都只有一個值,分別null和undefined,之所以將它們放在一塊,是因為在使用方面它們有很多相似之處。

相同點

在JavaScript中,null和undefined都表示“值的空缺”,兩者往往可以互換,在希望值是布爾類型的地方它們的值都是假值。null和undefined都不包含任何屬性和方法。甚至在JavaScript高級程序設計(3)中提出undefined值是派生自null值的,因此ECMA-262規定對它們的相等性測試要返回true:alert(null == undefined); //true

不同點

由上面我們知道,位於null和undefined之間的相位操作符(==)總是返回true,盡管如此,但是null和undefined的用途是完全不同的。

undefined

當我們使用var聲明一個變量但未對其進行初始化的時候,這個變量的值就是undefined,因此在實際運用中,沒有必要將一個變量的值顯示地設置為undefined。

技術分享圖片

需要區分的是,還有一種情況,那就是未定義的變量

技術分享圖片

運行上面的代碼,對於聲明了但未初始化的變量,會返回undefined,但是未聲明的變量就會報錯,也就是說,包含undefined值的變量和未定義的變量是不一樣的。但是對於未初始化和未聲明的這兩種變量使用typeof操作符時,返回的都是undefined的,這是因為,不論哪一種都沒有對變量執行真正的操作。

null

從邏輯角度看,null值表示一個空的對象指針,因此在使用typeof操作符檢測null值的時候會返回“object”,但是null本身並不是對象。

技術分享圖片

因此在定義變量的時候,如果該變量準備在將來用於保存對象,那麽最好將該變量初始化為null,這樣一來,只要直接檢查null值就可以知道相應的變量是否已經保存了一個對象的應用。

技術分享圖片

總結

通過上面的例子,我們不難發現,其實undefined更像是用來表示系統級、出乎意料的或類似錯誤的值的空缺,而null是表示程序的、正常的或者在意料之中的值的空缺,因此,如果我們需要將它們賦值給變量或者屬性,或者將它們作為參數傳入函數時,最佳選擇是使用null。

參考資料

JavaScript權威指南(第六版)

JavaScript高級程序設計(第三版)

JavaScript王者歸來

神奇的null和undefined