【问题标题】:Iterating on Javascript arrays with the "in" keyword使用“in”关键字迭代 Javascript 数组
【发布时间】:2011-10-30 10:56:10
【问题描述】:

好像没看懂JavaScript中in关键字的意思。

看看这段代码 sn-p (http://jsfiddle.net/3LPZq/):

var x = [1,2]
for(i in x){
    document.write(x[i]);
}

在 jsfiddle 中运行时,它不仅会打印数组中包含的值,还会打印数组对象的所有属性和方法。

当我这样改变它时(http://jsfiddle.net/4abmt/):

$(document).ready(function(){
var x = [1,2]
for(i in x){
    document.write(x[i]);
}});

它只打印值 1 和 2。

为什么会这样?这是由 jQuery 引起的还是 in 关键字的行为取决于文档是否已完全加载?

【问题讨论】:

  • 在您的第一个示例中,您选择了 Mootools 作为库(这似乎扩展了原型)。如果不选择任何库,则结果为:jsfiddle.net/fkling/3LPZq/6。但请注意,使用for...in 遍历数组是不好的做法。

标签: javascript jquery arrays iteration


【解决方案1】:

这是由于原型继承而发生的。一个对象不仅显示它自己的属性,还显示它所有的祖先属性。

要仅查找对象自身的属性,请使用obj.hasOwnProperty(prop)

var x = [1,2];
for (var i in x) {
   if (x.hasOwnProperty(i)) {
       document.write(x[i]);
   }
}

请参阅 hasOwnProperty 上的 MDN 文档。

【讨论】:

  • 我明白了,但是为什么在第二个示例中它只打印 1 和 2 而没有其他 Array 属性?
【解决方案2】:

jsFiddle 加载的一些库扩展了 Array 的默认原型,因此它显示了这些额外的功能。 jQuery 没有扩展 Array 原型,因此您看不到任何额外的功能。

【讨论】:

  • 谢谢!这回答了我的问题。
猜你喜欢
  • 2012-02-22
  • 2011-01-03
  • 2014-08-18
  • 2015-03-30
  • 2015-01-18
  • 2022-11-04
  • 2011-01-31
  • 1970-01-01
  • 2015-03-14
相关资源
最近更新 更多