术语[0] == ![0]
的含义是什么?虽然它们返回true
。但我需要解释它是如何返回true
,因为[0]的类型是对象而且![0]返回布尔值?那他们是如何平等的呢?感谢
答案 0 :(得分:8)
![0]
只是false
,因为所有非null
个对象都会投放到true
。
比较[0]
和false
时,它们会被转换为数字 - 不要问为什么,这就是它的方式。 [0]
首先转换为字符串"0"
(通过将条目与,
连接为分隔符而转换为字符串的数组),然后是数字0
。 false
被转换为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
。