对于... in为一个字符串数组

时间:2015-04-12 11:30:55

标签: javascript

对我来说,这看起来很奇怪:

products = ["Item1", "Item2", "Item3"];
for (var x in products) {
  debugger;
  console.log(x);
  // x === "0" instead of "Item1"
}

我想知道为什么?

3 个答案:

答案 0 :(得分:4)

for..in遍历可枚举属性,并且数组具有充当索引的数字属性。它只与对象一起使用。

使用Arrays也可以为您提供您不感兴趣的属性(例如那些属于Object对象原型继承的较高链的属性)

因此,请使用简单的for循环或Array.forEach

products.forEach(function(str){
   console.log(str);
});
// or
for(var i = 0; i < products.length; i++)
   console.log(products[i]);

答案 1 :(得分:1)

那是因为在你的情况下,变量x持有数组项的索引,而不是值。不应使用x,而应使用products[x]

products = ["Item1", "Item2", "Item3"];
for (var x in products) {
  debugger;
  console.log(products[x]);
}

现在,而不是:

0
1
2

你会得到

Item1
Item2
Item3

答案 2 :(得分:-1)

像这样迭代数组。 如果要迭代对象的属性而不是数组,则使用arr中的var!

var products = ["Item1", "Item2", "Item3"];
for (var i =0; i< products.length;i++) {
  debugger;
  console.log(products[i]);
  // x === "0" instead of "Item1"
}