摘自《JavaScrip 權威指南t》(第六版):
相同點:
1. 兩者都是假值,即轉換爲布爾值時均被轉換爲false;
2. 判斷相等運算符“==”認爲兩者是相等的(要使用嚴格相等運算符“===”來區分他們)
3. 兩者都屬於特殊的類型,且是各自類型的唯一成員。
不同點:
1. null是關鍵字,undefined是預定義的只讀全局變量,不是關鍵字;
2. typeof null 得到字符串“object”, typeof undefined 得到字符串“undefined”;
3. null可以被認爲是一種特殊的對象值, undefined是變量的一種取值;
4. null可以表示數字、字符串和對象是“無值”的, undefined的值就是“未定義”。
出現undefined的場合:
1. 變量已聲明,但還沒有初始化;
2. 要查詢的對象屬性或數組元素不存在;
3. 函數沒有返回任何值 ,則返回undefined;
4. 引用沒有提供實參的函數形參的值也會得到undefined。
如果你想將null或undefined賦值給變量或屬性,或將它們作爲參數傳入函數,最佳選擇是使用null。
if( o !== null )與if( o )是有區別的,前者顯式地檢測o是不是非null,只有當o不是null時纔會執行if後的代碼,後者沒有這麼嚴格:只有o不是false或者任何假值(比如null或者undefined或者“”或者0或者NAN)時它纔會執行這個if。 (PS:如果需要將null與0或者“”區分開,則需要使用一個顯式的比較。)