javascript - JavaScript 减去零更改结果
问题描述
我在 jsfiddle 中玩 Arrays 并注意到当我这样做时:
let a = [0,1,2,3,4];
for (let i in a) {
console.log(a.indexOf(i));
}
它记录:
但是当我这样做时:
let a = [0,1,2,3,4];
for (let i in a) {
console.log(a.indexOf(i - 0));
}
它记录:
减零改变了结果!
起初我认为这是一个 jsfiddle 问题,但后来我用我的代码编辑器尝试了同样的事情。为什么会发生这种情况,有人可以向我解释吗?
解决方案
当你这样做时:
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));
}
推荐阅读
- javascript - '也许推'的Javascript声明/不可变版本?
- linux - 标准 GNU 风格的关键字选项
- python - 如何限制文本文件中字符串的数量
- javascript - Javascript - 为函数参数中的对象可选字段设置默认值
- c++ - VS Code Mac OS Monterey 构建问题
- git - 如何将存储库直接上传到 GitHub 组织?
- node.js - 用节点编码单引号
- c# - 拆分多字字符串时,如何在不包含数字的单词之间保留空格?
- python - 根据两个不同数据框中的数据填充列
- ios - flutter sdk 2.5.3 permission_handler(^8.2.5) 状态值错误