使用for…in循环时,数组索引不响应严格相等

这是我今天遇到的一种奇怪的行为。但我不明白为什么会这样。

for (let x in [1]) {
    console.log(x === 0) // false
    console.log(x == 0) // true
}

代码片段应该是不言自明的。在第一个日志上,我们有strict equality,在下一个日志上,我们有loose equality. 为什么他们返回不同的结果?无论我们如何比较它们,具有相同值的数字是否都相等?

PS:如果您使用数组函数,例如forEach()map()进行迭代,则不存在此问题

[1].forEach((_, i) => {
    console.log(i === 0) // true
    console.log(i == 0) // true
})

回答

[1] 相当于 {0: 1}

当您使用 时for..in,它会遍历对象的属性(键)。虽然键都在字符串中,所以它会遍历['0']

所以

'0' === 0 // false
'0' == 0 // true

从那时起就很容易理解了


以上是使用for…in循环时,数组索引不响应严格相等的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>