if的判断
if(xxx){
}
js 是如何处理的?
原理
类型 | 结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判断 |
Number | +0, −0, 或者 NaN 为 false, 其他为 true |
String | 空字符串为 false,其他都为 true |
Object | true |
解密
对于括号里的表达式,会被强制转换为布尔类型
做几道测试题看一看
if ("hello") {
console.log("hello")
} //hello
if ("") {
console.log('empty')
} //无输出
if (" ") {
console.log('blank')
} //blank
if ([0]) {
console.log('array')
} //array
if('0.00'){
console.log('0.00')
} //0.00
== 的判断
对于==的判断,js是怎么处理的?
解密
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方法获取结果
看几个题目
"" == 0 //true
" " == 0 //true
"" == true //false
"" == false //true
" " == true //false
!" " == true //false
!" " == false //true
"hello" == true //false
"hello" == false //true
"0" == true //false
"0" == false //true
"00" == false //true
"0.00" == false //true
undefined == null //true
true == {} //false
[] == true //false
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == "[object Object]" //false
obj == 1 //true
obj == true //true