學(xué)習(xí)筆記 -- JavaScript if條件及相等運(yùn)算中的數(shù)據(jù)轉(zhuǎn)換
1. if(xx) 語(yǔ)句中數(shù)據(jù)類型的轉(zhuǎn)換
我們知道if語(yǔ)句條件需要一返回一個(gè)布爾值,如下所示:
if (true) {
console.log('hello');
}
運(yùn)行結(jié)果如下:

那如果我們?cè)趇f語(yǔ)句的條件中傳入其它的數(shù)據(jù)類型,會(huì)怎樣呢?比如像下面的代碼會(huì)輸出什么?
if ("hello") {
console.log('hello');
}
現(xiàn)在,判斷條件變成了一個(gè)字符串,那是怎么判斷的呢?請(qǐng)看運(yùn)行結(jié)果。

可以看到,它仍然輸出了"hello",也就是說條件仍然為真。
為什么一個(gè)字符串會(huì)變成布爾值呢?這就是if判斷中條件的數(shù)據(jù)類型轉(zhuǎn)換。
如果if語(yǔ)句的條件是非布爾類型,JavaScript會(huì)自動(dòng)將數(shù)據(jù)轉(zhuǎn)換為布爾類型的數(shù)據(jù)。
它的轉(zhuǎn)換規(guī)則相對(duì)簡(jiǎn)單:除了以下五個(gè)值的轉(zhuǎn)換結(jié)果為false,其他的值全部為true。
undefined
null
+0或-0
NaN
''(空字符串)
我們來驗(yàn)證一下:

以上代碼輸出結(jié)果為"world",可見判斷條件為false。再接著往下看:


這里有個(gè)問題需要注意,先看下面的代碼。

這跟上面一個(gè)好像是相同的,但是結(jié)果卻不一樣。這是因?yàn)闂l件中字符串內(nèi)有一個(gè)空格,空格也算字符所以它不是一個(gè)空字符串。
我們?cè)倏匆幌缕渌鼣?shù)據(jù)類型的轉(zhuǎn)換。


通過實(shí)際驗(yàn)證,除了上面所列的5種,其它數(shù)據(jù)均轉(zhuǎn)換為true.
2. 相等運(yùn)算(==)中的數(shù)據(jù)類型轉(zhuǎn)換
相等運(yùn)算符用來比較相同類型的數(shù)據(jù)時(shí),僅比較其是否相等。
比較不同類型的數(shù)據(jù)時(shí),相等運(yùn)算符會(huì)先將數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,然后再用嚴(yán)格相等運(yùn)算符比較,轉(zhuǎn)換時(shí)相當(dāng)于調(diào)用Number函數(shù)。類型轉(zhuǎn)換規(guī)則如下。
-
原始類型數(shù)據(jù)
原始類型的數(shù)據(jù)會(huì)轉(zhuǎn)換成數(shù)值類型再進(jìn)行比較。
-
對(duì)象
Number方法的參數(shù)是對(duì)象時(shí),將返回NaN,除非是包含單個(gè)數(shù)值的數(shù)組。

以上為自已學(xué)習(xí)中的理解,歡迎批評(píng)指正。
參考:
http://javascript.ruanyifeng.com/grammar/conversion.html#toc7


