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 不行 object对象必须经Valueof 再经toString
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方法获取结果