关于if(xx)和 a==b的判断

2018-05-21  本文已影响0人  小废柴JH

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
上一篇 下一篇

猜你喜欢

热点阅读