首页 > 解决方案 > JavaScript 减去零更改结果

问题描述

我在 jsfiddle 中玩 Arrays 并注意到当我这样做时:

let a = [0,1,2,3,4];

for (let i in a) {
    console.log(a.indexOf(i));
}

它记录:

-1、-1、-1、-1、-1

但是当我这样做时:

let a = [0,1,2,3,4];

for (let i in a) {
    console.log(a.indexOf(i - 0));
}

它记录:

0,1,2,3,4

减零改变了结果!

起初我认为这是一个 jsfiddle 问题,但后来我用我的代码编辑器尝试了同样的事情。为什么会发生这种情况,有人可以向我解释吗?

标签: javascriptarrays

解决方案


当你这样做时:

for (let i in a) ...

这会将数组的索引作为字符串迭代。它将数组视为对象,并像键一样遍历索引。你会得到字符串:"0", "1"...

您可以看到,如果您打印值并键入:

let a = [0,1,2,3,4];

for (let i in a) {
    console.log(i, typeof i)
}

这些字符串不在你的数组中——你的数组有数字——所以findIndex()找不到它们并给你-1. 但是,当您减去 0 时,javascript 会为您转换为整数并突然找到它们,因为索引与值匹配。

您可能想要的是for...of迭代这些值:

let a = [0,1,2,3,4];

for (let i of a) {
    console.log("i:", i, typeof i)
    console.log("index:", a.indexOf(i));
}


推荐阅读