解密JavaScript型別轉換
阿新 • • 發佈:2020-08-16
解密型別轉換
JavaScript是怎麼處理if判斷的?
if(){ }
例子:
// 題目1:如下程式碼輸出什麼? if ("hello") { console.log("題目1") //輸出題目1 } // 題目2:如下程式碼輸出什麼? if ("") { console.log('題目2') //if("")為false } // 題目3:如下程式碼輸出什麼? if (" ") { console.log('題目3') //輸出題目3 } // 題目4:如下程式碼輸出什麼? if ([0]) { console.log('題目4') //輸出題目4 } // 題目5:如下程式碼輸出什麼? if('0.00'){ console.log('題目5') //輸出題目5 }
對於括號裡面的表示式,會被強制轉換成Boolean型別
型別 | 結果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判斷 |
Number | +0, −0, 或者 NaN 為 false, 其他為 true |
String | 空字串為 false,其他都為 true |
Object | true |
== 的判斷
對於==的判斷,js是怎麼處理的?先看看下面幾個例子
"" == 0 //題目1 " " == 0 //題目2 "" == true //題目3 "" == false //題目4 " " == true //題目5 !" " == true //題目6 !" " == false //題目7 "hello" == true //題目8 "hello" == false //題目9 "0" == true //題目10 "0" == false //題目11 "00" == false //題目12 "0.00" == false //題目13 undefined == null //題目14 {} == true //題目15 [] == true //題目16 var obj = { a: 0, valueOf: function(){return 1} } obj == "[object Object]" //題目17 obj == 1 //題目18 obj == true //題目19
解答
x | y | 結果 |
---|---|---|
null | undefined | true |
Number | String | x == toNumber(y) |
Boolean | (any) | toNumber(x) == y |
Object | String or Number | toPrimitive(x) == y |
otherwise | otherwise | false |
toNumber
type | 結果 |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 |
toPrimitive
對於 Object 型別,先嚐試呼叫 .valueOf 方法獲取結果。
如果沒定義,再嘗試呼叫 .toString方法獲取結果