gpt4 book ai didi

javascript - 在对象为 bool 值的情况下,Javascript 中的类型强制如何进行?

转载 作者:搜寻专家 更新时间:2023-11-01 05:25:10 26 4
gpt4 key购买 nike

据我所知,(x == false) 应该和 !x 做同样的事情,因为它们都试图解释 x 作为 bool 值,然后取反。

但是,当我尝试对此进行测试时,我开始遇到一些极其奇怪的行为。

例如:

false == []false == ![] 都返回 true。

另外

false == undefinedtrue == undefined 都返回 false,也是如此

false == Infinitytrue == Infinity

false == NaNtrue == NaN

这里到底发生了什么?

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

最佳答案

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

对于 false == [] 的情况:

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

对于 false == ![] 的情况:

  • logical not operator !通过返回 ToBoolean(GetValue(expr))
  • 的反义词来执行
  • ToBoolean()对于任何对象始终为真,因此 ![] 的计算结果为 false(因为 !true = false),因此为 false == ![] 也是正确的。

(false == undefined) === false(true == undefined) === false 更简单:

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

其他两种情况的评估方式相同:首先将 bool 值转换为数字,然后将其与另一个数字进行比较。由于 0 和 1 都不等于 Infinity 或 Not A Number,因此这些表达式的计算结果也为 false

关于javascript - 在对象为 bool 值的情况下,Javascript 中的类型强制如何进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11264974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com