我正在学习JavaScript,现在我正在尝试在Node中运行以下代码以在数组中显示值:
let array = [1, 2, 3];
for (let a in array) {
console.log(a);
}
我希望以上代码将打印出1、2和3
但是,它会打印0、1、2。
谁能告诉我我的代码出了什么问题?
答案 0 :(得分:0)
永远不要使用for/in
来迭代数组。而且,当您这样做时,您只是在获取数组索引,而不是实际的数组元素。
for/in
迭代对象的所有可枚举属性,而不仅仅是数组元素,这些元素最终可能包含您不想要的东西。有关详细信息,请参见for ... in loop with string array outputs indices和For loop for HTMLCollection elements。
相反,您可以使用许多其他选项。现代的方式可能是for/of
,它适用于任何可迭代的(包括数组)。
用于的
let array = [1, 2, 3];
for (let a of array) {
console.log(a);
}
.forEach()
let array = [1, 2, 3];
array.forEach(function(a, index) {
console.log(a);
});
纯属循环
let array = [1, 2, 3];
for (let i = 0; i < array.length; i++) {
console.log(array[i]);
}
答案 1 :(得分:0)
TL; DR :for..in
语法捕获要迭代的对象的properties
,而不是您期望的对象的values
。 Mozilla开发人员网络是一个很好的资源,here对此进行了描述。
要获取的数组的属性是索引,要获取该值,您需要像这样使用数组索引运算符[]
在数组上使用索引的属性。
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);
}
答案 2 :(得分:-1)
let array = [1, 2, 3];
for (let a in array) {
console.log(array[a]);
}
答案 3 :(得分:-1)
let array = [1, 2, 3];
for (let a in array) {
console.log("index: " + a + ', ' + "value: " + array[a]);
}
这些是从0开始的数组索引。如果需要这些值,则需要获取该索引处的值。
答案 4 :(得分:-1)
a
是您的for in
循环中的增量,因此array[a]
将根据情况提供给您值。
仅供参考...
从技术上讲,在数组上使用for in
循环是个坏主意,因为for in
循环将属性接收为字符串,只是将数值作为数值将这些字符串转换为数字的数组。
var array = [1, 2, 3];
for(var i in array){
console.log(typeof i);
}
我会做如下的数组循环:
var array = [1, 2, 3];
array.forEach(function(val, inc){
console.log(typeof inc);
console.log(val);
});
// or
console.log('-------');
for(var i=0,l=array.length; i<l; i++){
console.log(array[i]);
if(i === 1)break;
}
// in a function
console.log('-------');
var anotherArray = array.concat([4, 5, 6, 7, 8, 9]);
function breakBefore(array, breakBefore, startAt){
var i = startAt === undefined ? 0 : startAt;
for(l=array.length; i<l; i++){
console.log('increment:'+i);
console.log('value:'+array[i]);
if(i === breakBefore){
return;
}
}
}
breakBefore(anotherArray, 6, 2);