需要解释一下术语[0] ==![0]

Cod*_*ant 1 javascript

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

Nie*_*sol 8

![0]很简单false,因为所有非null对象都被投射到了true.

当比较[0]false,它们被转换为数字-不要问为什么,这只是事情是这样的.[0]首先转换为字符串"0"(通过将条目与,分隔符连接而转换为字符串的数组),然后是数字0.false被转换为数字0,并且你拥有它:[0] == ![0]相当于0 == 0,这是真的.


rai*_*7ow 7

要理解这一点,![0]首先要通过表达式.它的计算结果为false:as [0](与JS中的任何Object一样)是一个真值.所以声明变成......

[0] == false

现在它更容易:false转换为0(对于布尔 - >数字规则),[0]并由对象到原始规则转换 - 首先转换为'0'(字符串),然后转换为0(数字).很显然,0 等于0.)

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

[0] == false

......而且......

![0] == false

...评价true:前者已经解释过,后者只是false == false.还有人对这些==Lint警告感到惊讶吗?)