无法在JavaScript中迭代对象的属性

时间:2014-04-20 02:24:47

标签: javascript

allRows[rowDiv.toString()] = rowDiv;
console.log('commence row' + allRows[rowDiv.toString()].phrases);
//not null
for(row in allRows) {
   console.log('for commence ' + row.phrases);
   //null
   console.log(row)
   //prints toString
}

rowDiv是一个带有“短语”属性的对象(我在其构造函数中定义为this.phrases = [],后来又添加了元素)。 allRows是一个包含所有rowDiv对象的对象(通过allRows [rowDiv.toString()] = rowDiv插入的对象)。为什么'row'只给我toString而不是实际的对象?或者可能还有其他事情发生。

3 个答案:

答案 0 :(得分:2)

这种类型的“for each”循环在javascript中的工作方式略有不同。你必须做这样的事情:

for(row in allRows) {
   console.log('for commence ' + allRows[row].phrases);
   //null
   console.log(allRows[row])
   //no longer should print toString
}

答案 1 :(得分:1)

您只是打印出要查找的对象的

在您使用的词典中,您使用toString()的结果作为键。

要获取实际对象,而不仅仅是toString()结果,您需要使用allRows[row]而非row

因此,例如,通过此更改,您的代码将如下所示:

allRows[rowDiv.toString()] = rowDiv;
console.log('commence row' + allRows[rowDiv.toString()].phrases);
//not null
for(row in allRows) {
   console.log('for commence ' + row.phrases);
   //null
   console.log(allRows[row]); // CHANGE MADE HERE
   //prints toString
}

答案 2 :(得分:0)

也可以使用for...of完成 https://developer.mozilla.org/enUS/docs/Web/JavaScript/Reference/Statements/for...of

allRows[rowDiv.toString()] = rowDiv;
console.log('commence row' + allRows[rowDiv.toString()].phrases);
//not null
for(row of allRows) {
   console.log('for commence ' + row.phrases);
   //null
   console.log(row)
   //prints toString
}