使用“in”关键字迭代Javascript数组

似乎我不理解JavaScript中in关键字的含义。

看看这段代码片段( 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关键字的行为取决于文档是否完全加载?

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

这是因为原型inheritance。 对象不仅显示其自己的属性,还显示其所有’祖先属性’。

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

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

请参阅hasOwnProperty上的MDN Docs。