Javascript for 循环返回键 "indexof"

标签 javascript for-loop

我有一些 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/

相关文章:

javascript - 在jquery中选择id以字符串开头的元素

javascript - 将类添加到最近的 ul

for-loop - vhdl "for loop",步长不等于 1

javascript - 推迟脚本执行一段时间

javascript - 带有 NodObjC 的 NSStatusBar

javascript - 将 url 传递给 jQuery 函数

Char 数组意外的空字符

python - 在循环初始化的内联中引用一个列表?

c - 哪个更有效,循环或只是定期添加

javascript - 如何在 JavaScript 中使用 for 循环将所有正整数添加到 'sum' ?