Han*_*s Z 4 javascript type-conversion
据我所知,(x == false)应该做同样的事情!x,因为他们都试图解释x为布尔值,然后否定它.
但是,当我试图测试时,我开始得到一些非常奇怪的行为.
例如:
false == []并且false == ![]都返回true.
另外
false == undefined并且true == undefined两者都返回false,就像那样
false == Infinity并true == Infinity与
false == NaN和true == NaN.
到底发生了什么?
一切都在这里:http://es5.github.com/#x11.9.3
对于以下情况false == []:
false 转换为数字(0),因为这总是用布尔值完成.[].valueOf().toString(),这是一个空字符串.0 == ""然后通过将空字符串转换为数字来计算,并且因为其结果也是0,false == []则为真.对于以下情况false == ![]:
!通过返回的相对执行ToBoolean(GetValue(expr))ToBoolean()对于任何对象总是如此,因此![]求值为false(因为!true = false),因此false == ![]也是如此.(false == undefined) === false和(true == undefined) === false甚至更简单:
false并true再次转换为数字(分别为0和1).false.另外两种情况的评估方式相同:第一个布尔值为Number,然后将其与另一个数字进行比较.由于0和1都不等于无穷大或不是数字,因此这些表达式也会评估为false.