对于括号中的表达式,会转换成bool值再进行相应的判断。
什么值将会转换成false值:
undefined,Null,bool中的false,Number中的+0,-0和NaN,String中的空字符串
严格相等与非严格相等:
=== 三个等号是严格相等的意思:
如果等号两边的数据具有不同的类型,那他们就不是严格相等的,
== 两个等号是非严格相等的意思:
在转换前,会先将等式两边转换成一个类型,再进行比较,如果相等,则会返回true
所有的值与undefined 和null都不相等,undefined==null,
"" == 0 //题目1
两边都是false,因此结果为true
" " == 0 //题目2
空白字符转换(tonumber)后为0, 结果为true
"" == true //题目3
结果false,空字符串为false
"" == false //题目4
结果为true 理由同上
" " == true //题目5
结果为false,同题目2
!" " == true //题目6
除了空字符串为false;其他都为true,true取反为false
!" " == false //题目7
同上
"hello" == true //题目8
hello转换为数字为NAN,因此不为true
"hello" == false //题目9
hello转换为数字为NAN,因此也不为false
"0" == true //题目10
"0"转换成数字为0,因此为false
"0" == false //题目11
为true
"00" == false //题目12
为true
"0.00" == false //题目13
为true
undefined == null //题目14
结果为true; 死记硬背把
{} == true //题目15
结果为false,里面无tovalue 只是一个空的字符串
[] == true //题目16
同上,空数组。
var obj = {
a: 0,
valueOf: function(){return 1}
}
valueof 得到1,就拿1和这些判断
obj == "[object Object]" //题目17
false,1!= "[object Object]"
obj == 1 //题目18
true
obj == true //题目19
true