if的判斷
// 題目1:如下代碼輸出什么?
if ("hello") {//true
console.log("hello")
}
// 題目2:如下代碼輸出什么?
if ("") { //false
console.log('empty')
}
// 題目3:如下代碼輸出什么?
if (" ") { //true
console.log('blank')
}
// 題目4:如下代碼輸出什么?
if ([0]) { //true
console.log('array')
}
if('0.00'){ //true
console.log('0.00')
}
解密
對于括號里的表達(dá)式紊搪,會被強(qiáng)制轉(zhuǎn)換為布爾類型
原理
類型 結(jié)果
Undefined false
Null false
Boolean 直接判斷
Number +0, ?0, 或者 NaN 為 false, 其他為 true
String 空字符串為 false,其他都為 true
Object true
== 的判斷
"" == 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 結(jié)果
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 Result
Undefined NaN
Null 0
Boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123
toPrimitive
對于 Object 類型荐糜,先嘗試調(diào)用 .valueOf 方法獲取結(jié)果搂妻。 如果沒定義沽瘦,再嘗試調(diào)用 .toString方法獲取結(jié)果