1

这个词[0] == ![0]是什么意思?虽然他们返回true。但我需要解释它是如何返回true的,因为 [0] 的类型是对象并且 ![0] 返回布尔值?那么他们是如何平等的呢?谢谢

4

3 回答 3

8

![0]很简单false,因为所有非null对象都转换为true.

比较[0]andfalse时,它们被转换为数字 - 不要问为什么,就是这样。[0]首先转换为字符串"0"(通过将条目与,for 分隔符连接来将数组转换为字符串),然后是数字0. false被强制转换为 number 0,你就有了:[0] == ![0]相当于0 == 0,这是真的。

于 2013-01-29T20:37:27.630 回答
7

要理解这一点,![0]首先要通过表达式。它评估为false- 因为[0](与 JS 中的任何对象一样)是一个真实值。所以声明变成了...

[0] == false

现在更容易了:false转换为0(对于 Boolean -> Number 规则),并[0]通过 Object-To-Primitive 规则转换 - 首先转换为'0'(String),然后转换为0(Number)。显然,0 等于0)

PS 是的,这可能看起来很奇怪,但两者都......

[0] == false

... 和 ...

![0] == false

...评估为true:前者已经解释,后者只是false == false==有人仍然对那些Lint 警告感到惊讶吗?)

于 2013-01-29T20:34:56.943 回答
0

您已将表达式拆分为多个部分:

typeof([0]) // "object"
[0] == true // false
![0] == true // false
![0] == false // true

这样做的原因是因为在 JavaScript 中只有值1被隐式转换为 true,所以所有其他值都被转换为 false。only 否定一个错误的![0]表达式,因此它变成(false == false) == true.

于 2013-01-29T20:38:49.823 回答