关于JavaScript for..in表示法的澄清

时间:2012-03-19 15:10:51

标签: javascript for-loop foreach

x这是一个数字吗?它在下面的person[x]部分中使用。这是如何工作的,我迷失了它:

var person={fname:"John",lname:"Doe",age:25}; 
var x;

for (x in person)
{
document.write(person[x] + " ");
}

我感谢任何提示或建议。

4 个答案:

答案 0 :(得分:3)

不,x不是数字。只有在迭代Array时才会出现这种情况,在这种情况下x将是元素的数字索引。在这种情况下,它将是一个字符串,因为JavaScript对象实际上是关联数组(由字符串索引)。它将是对象中每个字段的名称:

for (var x in person) {
    document.write(x + ' = ' + person[x]);
}

应输出:

fname = John
lname = Doe
age = 25

答案 1 :(得分:2)

忘掉for (key in obj)。引用一位着名的教育家:

  

每个人都知道你应该迭代一个对象的键,而不是对象本身。

因此,迭代对象的正确方法是:

var keys = Object.keys(obj); // array of keys 

for (var i = 0, len = keys.length; i < len; i += 1) {
    var item = obj[keys[i]];
    /* ... */
}

答案 2 :(得分:1)

For ...迭代对象的可枚举属性。我建议您阅读MDN page on for...in以获取更多详细信息。

答案 3 :(得分:1)

Adel你必须了解基本的数据结构。

`

1&GT;在上面的代码片段中,“person”不是数组,它是字典或散列表(这就是为什么x不是数字)。它们是键数组:值对。参见http://en.wikipedia.org/wiki/Associative_array

2&gt;“字典/关联数组”在键上迭代。 因此,代码for(x in person)将为您提供键数组,而不是数组迭代中我们期望的数字。for(x in person){console.log(x);}