在对象为布尔值的情况下,Javascript 中如何进行类型强制转换?

2024-04-19

尽我所知,(x == false)应该做同样的事情!x,因为他们都试图解释x作为布尔值,然后对其求反。

然而,当我尝试对此进行测试时,我开始出现一些极其奇怪的行为。

例如:

false == [] and false == ![]两者都返回 true。

此外

false == undefined and true == undefined两者都返回 false,就像

false == Infinity and true == Infinity and

false == NaN and true == NaN.

这里究竟发生了什么?

http://jsfiddle.net/AA6np/1/ http://jsfiddle.net/AA6np/1/


一切都在这里:http://es5.github.com/#x11.9.3 http://es5.github.com/#x11.9.3

对于以下情况false == []:

  • false转换为数字 (0),因为这始终是通过布尔值完成的。
  • [] 通过调用转换为原语[].valueOf().toString(),这是一个空字符串。
  • 0 == ""然后通过将空字符串转换为数字来求值,因为结果也是 0,false == []是真的。

对于以下情况false == ![]:

  • The 逻辑非运算符! http://es5.github.com/#x11.4.9通过返回相反的值来执行ToBoolean(GetValue(expr))
  • ToBoolean() http://es5.github.com/#x9.2对于任何对象总是正确的,所以![]评估为false(因为!true = false),因此是false == ![]也是如此。

(false == undefined) === false and (true == undefined) === false甚至更简单:

  • false and true再次转换为数字(分别为 0 和 1)。
  • 因为未定义不能与数字进行比较,所以链会冒泡到默认结果,即false.

其他两种情况的评估方式相同:首先将布尔值转换为数字,然后将其与其他数字进行比较。由于 0 和 1 都不等于无穷大或不是数字,因此这些表达式的计算结果也为false.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在对象为布尔值的情况下,Javascript 中如何进行类型强制转换? 的相关文章

随机推荐