JavaScript中0, "", null, false, undefined的區別

風靈使發表於2018-09-04

JavaScript0, "", null, false, undefined返回的Boolean型別均為false。然而它們所指的並不是同一個概念,需要加以區分。

首先先看一段程式碼:

document.write(typeof(0))       //number
document.write(typeof(""))      //string
document.write(typeof(null))        //object
document.write(typeof(false))       //boolean
document.write(typeof(undefined))   //undefined

從上述程式碼可以看出:0是數字型別物件,空字串是字串型別物件,nullobject物件,false是布林型別物件,undefined還是undefined型別.。

對於null為什麼是一個object物件,這是JavaScript最初實現的一個錯誤,後來被ECMAScript沿用下來。可以將它理解為一個不存在的物件的佔位符。

使用==操作將0false與其他物件進行比較:

document.write(false==undefined);   //false
document.write(false==null);        //false
document.write(undefined==0);       //false
document.write(null==0);        //false
document.write(""==0);          //true
document.write(false==0);       //true
document.write(false=="");      //true
document.write(null==undefined);    //true

觀察可發現:0、""false是相等的,nullundefined是相等的,而undefinednull並不等於false物件。
可以把0、""false歸為一類,稱之為“假值”,把nullundefined歸為一類,稱之為“空值”。假值還是一個有效的物件,所以可以對其使用toString等型別相關方法,空值則不行。

document.write(false.toString());    // false
document.write("".length);         // 0
document.write((0).toString());   // 0
document.write(undefined.toString());   // throw exception "undefined has no properties"
document.write(null.toString());        // "null has no properties"

undefined表示無效物件,null表示空物件。當宣告的變數未被初始化時其預設值為undefined;如果被賦予null,則代表變數初始化值為空值。ECMAScript認為undefined是從null派生出來的所以把他們定義為相等。
以下兩種方式會輸出false

document.write(null===undefined);        //false 
document.write(typeof(null)==typeof(undefined)); //false

因為===代表的是絕對等於,判斷值及型別是否完全相等。nullundefined各自的type在前面已經說過。

相關文章