我正在学习 JavaScript,现在我正尝试在 Node 中运行以下代码以显示数组中的值:
let array = [1, 2, 3];
for (let a in array) {
console.log(a);
}
我希望上面的代码将打印 1、2 和 3
但是,它会打印 0、1、2。
谁能告诉我我的代码出了什么问题?
原文由 Kelvin Ho 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在学习 JavaScript,现在我正尝试在 Node 中运行以下代码以显示数组中的值:
let array = [1, 2, 3];
for (let a in array) {
console.log(a);
}
我希望上面的代码将打印 1、2 和 3
但是,它会打印 0、1、2。
谁能告诉我我的代码出了什么问题?
原文由 Kelvin Ho 发布,翻译遵循 CC BY-SA 4.0 许可协议
TL;DR : for..in
语法抓住了你迭代的对象的 properties
values
. Mozilla Developer Network 是一个很好的资源, 此处 对其进行了描述。
您正在获取的数组的属性是索引,要使用数组索引运算符 []
获取您需要使用数组索引属性的值,就像这样。
let array = [1, 2, 3];
for (let a in array) {
console.log(array[a]);
}
或者使用 for..of
语法来获取对象的值,就像这样。
let array = [1, 2, 3];
for (let a of array) {
console.log(a);
}
原文由 Dalton 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
您永远不应该使用
for/in
来迭代数组。而且,当您这样做时,您只是获得了数组索引,而不是实际的数组元素。for/in
迭代对象的所有可枚举属性,而不仅仅是最终可能包含您不想要的内容的数组元素。有关详细信息,请参阅 for … in loop with string array outputs indices 和 For loop for HTMLCollection elements 。相反,您可以使用任意数量的其他选项。现代方式可能是
for/of
适用于任何可迭代对象(包括数组)。对于/属于
.forEach()
普通for循环