1. 程式人生 > 實用技巧 >解密JavaScript型別轉換

解密JavaScript型別轉換

解密型別轉換

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方法獲取結果