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

时间:2013-01-29 20:32:05

标签: javascript

术语[0] == ![0]的含义是什么?虽然它们返回true。但我需要解释它是如何返回true,因为[0]的类型是对象而且![0]返回布尔值?那他们是如何平等的呢?感谢

3 个答案:

答案 0 :(得分:8)

![0]只是false,因为所有非null个对象都会投放到true

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

答案 1 :(得分:7)

要理解这一点,请先查看![0]表达式。它的计算结果为false - [0](与JS中的任何对象一样)是一个真值。所以声明变成......

[0] == false

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

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

0

......和......

[0] == false

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

答案 2 :(得分:0)

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

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

之所以这样,是因为在JavaScript中只将值1隐式转换为true,因此所有其他值都转换为false。 ![0]只会否定虚假表达,因此会变为(false == false) == true