0

有人可以向我解释为什么...(这是在 chrome 控制台中)

空==假//假

!null == false //假

[] ? '你好' : '再见' //'你好'

[] == 真?'你好' : '再见' //'再见'

我可以想出更多,但基本上 javascript 是如何得出这些结果的?

4

3 回答 3

2

JavaScript 做了很多类型转换,这在不知道的情况下并不明显(JavaScript 相等传递性很奇怪)。

!NOT 运算符、函数Boolean? :三元运算符、if- 子句和逻辑 AND/OR 运算符确实使用内部ToBoolean转换- 它是我们对0NaN""null和的理解undefined的原因false

但是,当您比较事物时,(非严格)相等比较算法开始发挥作用,在比较对角线类型时会产生一些看似奇怪的结果。在你的情况下:

  • null仅等于自身或undefined不等于false
  • 当您将数组对象与布尔值进行比较时,它会变得更加复杂。布尔值与其他类型进行比较,就好像它们是数字一样,即被true转换为1第一个。然后,当一个对象与一个数字进行比较时,它将被转换为一个原始值(没有首选类型)——调用本质上是调用数组方法DefaultValue算法。So is cast to - 然后传递给,因为它将与. 到底是不是。但是,和或保持...</li> .toString.join()[]""ToNumber10 1[] == false[1] == true["1"] == true
于 2013-08-29T00:09:55.220 回答
0

magic *waves hands mysteriously*

On a more serious note, for the first two, the ! operator calls toBoolean on null, so if you checked !null == !false or !!null == false you should get true. Similar things are likely happening in the other cases.

With information provided by Tore Hanssen, we can answer the other two as well. [] is a 'truthy' value, but not a boolean, so directly comparing it to true returns false. However, you could use the ! operator again to make it a boolean, so !![] == true returns true!

于 2013-08-28T23:52:15.257 回答
0

这里有一篇关于这个主题的有趣帖子:http: //javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/

在您的某些示例中,要强制强制,仅使用“==”是不够的。

!!null == 假

!![]

!![] == 真

于 2013-08-29T00:09:16.097 回答