0

我正在使用这段代码。

var stuff = "mango,tango,snake";
for (thing in stuff.split(","))
  console.log(thing);

我期待三行字。我得到三行索引。我检查了toString等方法。没有任何帮助。

  1. 为什么?
  2. 我应该改用什么?
4

4 回答 4

1

这是正常的行为。要记录值,请使用

var arr = stuff.split(",");
for (var thing in arr)
  console.log(arr[thing]);

请参阅MDNfor in(强调我的):

每次迭代都会为变量分配不同的属性名称。

于 2013-04-03T19:48:40.493 回答
0

Javascript 数组也只是一个对象它也继承自Object. 但是该Array也继承Array.prototype并获得了一些特殊的方法和行为。

但毕竟它只是一个Object,这意味着它的结构看起来像

{
    0:   'mango',
    1:   'tango',
    2:   'snake'
}

如果您现在for..in在该对象上循环,我们只会得到您描述的结果(以及我们应该期望的结果)。对象的,只是索引值,我们只是循环对象键,对吧?

要获取键后面的实际值,我们访问整个对象,例如

objectName[ key ]
于 2013-04-03T19:51:12.797 回答
0

我应该改用什么?

您可以使用ECMAScript 5 's功能Array.forEach来满足您的需求。

var stuff = "mango,tango,snake";
stuff.split(",").forEach(function(thing){ alert(thing); });
于 2013-04-03T20:04:52.717 回答
0

循环遍历数组的标准方法是使用:

var stuffArray=stuff.split(",");
for (var i=0, stuffLength=stuffArray.length;i<stuffLength;i++) {
    // here you can retrieve the value stuffArray[i]
}

还有一个forEach 方法,但旧浏览器(如 IE 8)不支持。

for...in 循环遍历数组对象的属性,并且可能给您提供的不仅仅是数组项。

于 2013-04-03T20:07:23.893 回答