var myArr = [{a:1, b:2}, {c:3, d:4}];
for (var item in myArr) {
console.log(item);
}
为什么返回的是键(例如:0、1),而不是对象本身?
var myArr = [{a:1, b:2}, {c:3, d:4}];
for (var item in myArr) {
console.log(item);
}
为什么返回的是键(例如:0、1),而不是对象本身?
在JavaScript: The Good Parts中,Douglas Crockford建议避免使用for in
语句。
如果您使用for in
循环来遍历对象中的属性名称,则结果不是有序的。
for in
循环最适用于迭代名称-值对,而for each
循环最适用于迭代值,即数组。
E.g,
var o = {'name':'Batman', 'age':33, 'city':'Gotham City'};
for (var p in o) {
console.log(p+': '+o[p]);
}
如果我们使用上述对象的 For Each 循环,就无法获取属性名称。
注意:
Javascript 的 for
..in
循环总是返回索引/名称,而不是值。要获取你想要的值,你应该使用:
var myArr = [{a:1, b:2}, {c:3, d:4}];
for (var index in myArr) {
console.log( myArr[index] );
}
但是,如前所述,for
.. in
语句应该谨慎使用,并且不适用于数组。相反,你应该使用for
循环。
var myArr = [{a:1, b:2}, {c:3, d:4}];
for( var i=0, l=myArr.length; i<l; i++ ) {
console.log( myArr[i] );
}
for
... in
循环遍历对象的键(属性)。length
属性的对象。 - SLaks为了适应最新的ECMAScript 6标准,添加一个答案。
查看this页面,了解具有示例的精彩阅读。
还有一个相当美味的警告:这个惊人的新功能将与几乎所有可迭代对象一起工作!来自MDN:
for...of语句创建一个循环,遍历可迭代对象(包括数组、映射、集合、字符串、TypedArray、参数对象等)...
例如,你可以使用:
for (let item of myArr) {
console.log(item);
}
for (let obj of myArr) {
console.log(obj);
}
for each ... in
语句是仅在基于Mozilla的实现中可用的扩展(它在其他浏览器上无法运行)。当使用数组时,只需使用任何顺序循环即可...另请参阅。 - Christian C. Salvadófor...of
循环是实现这个功能的新且大大改进的方法。请参见下面的答案。 - GrayedFox