这个词[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.