术语[0] == ![0]
是什么意思?虽然他们true
返回.但是我需要解释它如何返回true
因为 [0] 的类型是对象和![0] 返回布尔值?那么他们是如何平等的呢?谢谢
![0]
只是false
,因为所有非null
的对象都投射到true
。
比较[0]
和false
时,它们被转换为数字 - 不要问为什么,就是这样。 [0]
首先转换为字符串"0"
(通过将条目与分隔符的,
连接来转换为字符串的数组),然后是数字0
。 false
被投射到数字 0
上,你得到它:[0] == ![0]
等价于 0 == 0
,这是真的。
要理解这一点,请先浏览![0]
表达式。它的计算结果为 false
- 因为[0]
(与 JS 中的任何对象一样)是一个真实值。所以声明变成了...
[0] == false
现在它更容易了:false
转换为0
(对于布尔值 -> 数字规则),[0]
通过对象到基元规则进行转换 - 首先转换为'0'
(字符串),然后转换为0
(数字)。显然,0
等于0
.)
附言是的,这可能看起来很奇怪,但两者都...
[0] == false
。和。。。
![0] == false
。评估true
:前者已经解释过了,后者只是false == false
。有人仍然对那些==
Lint 警告感到惊讶吗?)
您已将表达式拆分为多个部分:
typeof([0]) // "object"
[0] == true // false
![0] == true // false
![0] == false // true
这是因为在 JavaScript 中只有值1
被隐式转换为 true,因此所有其他值都转换为 false。![0]
只否定一个错误的表达式,因此它变得(false == false) == true
。