这个词[0] == ![0]
是什么意思?虽然他们返回true
。但我需要解释它是如何返回true
的,因为 [0] 的类型是对象并且 ![0] 返回布尔值?那么他们是如何平等的呢?谢谢
3 回答
![0]
很简单false
,因为所有非null
对象都转换为true
.
比较[0]
andfalse
时,它们被转换为数字 - 不要问为什么,就是这样。[0]
首先转换为字符串"0"
(通过将条目与,
for 分隔符连接来将数组转换为字符串),然后是数字0
. false
被强制转换为 number 0
,你就有了:[0] == ![0]
相当于0 == 0
,这是真的。
要理解这一点,![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 警告感到惊讶吗?)
您已将表达式拆分为多个部分:
typeof([0]) // "object"
[0] == true // false
![0] == true // false
![0] == false // true
这样做的原因是因为在 JavaScript 中只有值1
被隐式转换为 true,所以所有其他值都被转换为 false。only 否定一个错误的![0]
表达式,因此它变成(false == false) == true
.