if判斷中 true 和 false的分類("",0,null 等等)

區分JS中的undefined,null,"",0和false

 

今天有同事問我一個Js 問題,if (0 == '') 是true  很不理解,單獨做了一下測試,記錄於此。

 

複製代碼

<script>

alert(0 == ''); //true
alert(0 == false); //true
alert(false == ''); //true
alert(null == undefined); //true

alert(!0); //true
alert(!false); //true
alert(!undefined); //true
alert(!null); //true
alert(!''); //true

alert(0 == undefined); //false
alert(0 == null); //false
alert(false == null); //false
alert(false == undefined);//false
alert('' == null); //false
alert('' == undefined); //false

</script>

複製代碼

 

在程序語言中定義的各種各樣的數據類型中,我們都會爲其定義一個"空值"或"假值",比如對象類型的空值null,.NET Framework中數據庫字段的空值DBNull,boolean類型的假值false等等。在JavaScript中也有很多種的"空值"和"假值",那麼它們都有什麼共同點和不同點呢?


    其實標題裏面我已經列出了JavaScript中所有的"空值"和"假值",除了boolean值本身就是true和false這兩種情況外,其它數據類型的"空值"主要是undefined和defined這兩大類。這些空值的類型分別是:

 typeof(undefined) == 'undefined'
 typeof(null) == 'object'
 typeof("") == 'string'
 typeof(0) == 'number'
 typeof(false) == 'boolean'


    這五個值的共同點是,在if語句中做判斷,都會執行false分支。當然從廣義上來看,是說明這些數值都是其對應數據類型上的無效值或空值。還有這五個值作!運算,結果全爲:true。

    這幾個值中也有不同,其中undefined和null比較特殊,雖然null的類型是object,但是null不具有任何對象的特性,就是說我們並不能執行null.toString()、null.constructor等對象實例的默認調用。所以從這個意義上來說,null和undefined有最大的相似性。看看null == undefined的結果(true)也就更加能說明這點。不過相似歸相似,還是有區別的,就是和數字運算時,10 + null結果爲:10;10 + undefined結果爲:NaN。

    另外""、0和false雖然在if語句表現爲"假值",可它們都是有意義數據,只是被作爲了"空值"或"假值",因爲:"".toString(),(0).toString()和false.toString()都是合法的可執行表達式。

    其實這5個值在上面所說的這些差異裏,並不太會給程流程控制帶來太大的問題,那麼要區分它們什麼呢?需要注意區分的是這些值在轉換爲String時的差異是比較大的,它們到String的轉換關係是:

 String(undefined) -> "undefined"
 String(null) -> "null"
 String("") -> ""
 String(0) -> "0"
 String(false) -> "false"


    這個轉換關係在做字符串累加時需要特別的注意,否這會出些意想不到的問題,今天就遇到一個null被默認轉爲"null"給弄得迷糊了好一陣子

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章