我有一些 JavaScript,如下所示
for (var titleKey in data.d) {
var title = data.d[titleKey];
}
这实际上是从 JQuery 调用 .NET Web 服务返回的,但我不认为这是相关的。
我的循环正确地迭代集合中的每个元素,然后再次继续循环。这里的 titleKey 是 'indexof',title 是 'undefined'。
这发生在我的代码中的两个不同位置。
这是什么原因造成的?我该如何预防?
提前致谢。
最佳答案
您需要从循环中排除原型(prototype)的属性。 for ... in
结构将循环遍历它在原型(prototype)链中找到的所有内容*,而不仅仅是子对象的属性。
for (var titleKey in data.d) {
if (data.d.hasOwnProperty(titleKey)) {
// own property //
}
else {
// inherited property //
}
}
根据控制台日志的内容,我怀疑您有一个在其原型(prototype)中实现了 Array 的 indexof
的库。
我的建议是使用 correct way遍历数组:
for (var index = 0; index < data.d.length; index++) {...}
for in
适用于对象,而不是数组。 这是初学者常见的错误,人们滥用了 Array 派生自 Object 的事实。
*
查看 davidchambers 的评论
关于Javascript for 循环返回键 "indexof",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8262128/