[英]JS: Looping through array (for … in)
为什么在我这样做
var footnoteLinks = [1,2,3];
for (var i in footnoteLinks) {
document.write(footnoteLinks[i] + ", ");
}
我得到的是类似...
1,2,3,函数(){返回较低; },函数Array(){[native code]},函数pop(){[native code]},函数push(){[native code]},函数reverse(){[native code]},函数shift() {[本机代码]},函数sort(){[本机代码]},函数splice(){[本机代码]},函数unshift()
这是为什么? 函数的功能等等...我认为它可以正常运行b4,我不知道是什么原因造成的,对于我尝试过的所有浏览器来说似乎都是相同的。 Firefox 3.6,Chrome 6(我认为是),IE9
for(var in obj)
用于迭代对象的属性。 您将获得已创建的Array对象的属性。
您需要更传统的循环/索引构造:
for(var i=0,z=footnoteLinks.length; i<z; i++)
一些JavaScript运行时在Array对象上也具有map
和reduce
方法,但这不能保证。 不过,大多数JavaScript库都具有类似的内容(或者可能是each
方法)。
在javascript中,
for (var k in {a:1, b:2}) {
不只是遍历a和b; 它还会遍历该对象原型的所有成员。 由于函数是javascript中的值,因此包含了Object的所有方法。 有三种方法可以避免这种情况:
for/in
循环不能用于遍历数组,因为它还会枚举用户定义的属性(请参阅MDC文档 )。 在数组对象上和for each/in
循环中for each/in
forEach
方法,但仅在JavaScript 1.6+中可用(=目前尚不可用)。 您可能要使用许多JavaScript框架中的一些,或者编写自己的实用程序函数来遍历数组:
function iterate(a, func) {
for (var i=0; i<a.length; i++)
func(a[i]);
}
iterate([1, 2], function(x) { console.log(x) });
克里斯·摩根 ( Chris Morgan)建议,替代韦斯顿C的答案的方法是在for in
循环中使用hasOwnProperty
函数:
for(var i in obj) if(obj.hasOwnProperty(i)) {
document.write(obj[i]);
}
是的,它比使用传统的for
循环迭代要慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.