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

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')
}
解密
对于括号里的表达式,会被强制转换为布尔类型
原理
类型 结果
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 结果
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方法获取结果

你可能感兴趣的:(关于if(xx)和 a==b的判断)