使用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
从那时起就很容易理解了