使用“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。