If(xx)
1 // 题目1:如下代码输出什么? 2 if ("hello") { 3 console.log("hello") 4 } //true 5 6 // 题目2:如下代码输出什么? 7 if ("") { 8 console.log(‘empty‘) 9 }//false 10 11 // 题目3:如下代码输出什么? 12 if (" ") { 13 console.log(‘blank‘) 14 }//true 15 // 题目4:如下代码输出什么? 16 if ([0]) { 17 console.log(‘array‘) 18 }//true 19 20 if(‘0.00‘){ 21 console.log(‘0.00‘) 22 }//true 23 24 if(+0.00){ 25 console.log(‘haha‘) 26 }//false +转换为数字 27 28 if([]){ 29 console.log(‘haha‘) 30 }//turn
括号里的表达式,会强制转换为布尔类型。 不要写上面误导的写法,if(a === 0){ }
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0, ?0, 或者 NaN 为 false, 其他为 true |
String | 空字符串为 false,其他都为 true |
Object | true |
==的判断
1 "" == 0 //题目1 2 " " == 0 //题目2 3 "" == true //题目3 4 "" == false //题目4 5 " " == true //题目5! 6 " " == true //题目6 7 !" " == false //题目7 8 "hello" == true //题目8 9 "hello" == false //题目9 10 "0" == true //题目10 11 "0" == false //题目11 12 "00" == false //题目12 13 "0.00" == false //题目13 14 undefined == null //题目14 15 true == true //题目15 16 [] == true //题目16 17 var obj = { 18 a: 0, 19 valueOf: function(){return 1} 20 } 21 obj == "[object Object]" //题目17 22 obj == 1 //题目18 23 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 | Result |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 |
toPrimitive
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果