JavaScript for ... in和vs for

你认为在...和循环中有很大的不同吗? 你喜欢用什么样的“for”,为什么?

假设我们有一组关联数组:

var myArray = [{'key': 'value'}, {'key': 'value1'}];

所以我们可以迭代:

for (var i = 0; i < myArray.length; i++)

和:

for (var i in myArray)

我没有看到很大的区别。 有没有任何性能问题?


选择应该基于哪一个习语是最好理解的。

一个数组是迭代使用:

for (var i = 0; i < a.length; i++)
   //do stuff with a[i]

用作关联数组的对象使用下面的代码迭代:

for (var key in o)
  //do stuff with o[key]

除非你有地球破碎的原因,否则坚持已有的使用模式。


道格拉斯克罗克福德在JavaScript中推荐:Good Parts(第24页)以避免使用for in语句。

如果您使用for in来循环对象中的属性名称,则结果不会被排序。 更糟的是:你可能会得到意想不到的结果 它包含从原型链继承的成员和方法的名称。

除了属性以外的所有东西都可以用.hasOwnProperty过滤掉。 此代码示例执行您最初可能需要的内容:

for (var name in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, name)) {
        // DO STUFF
    }
}

仅供参考 - jQuery用户


jQuery的each(callback)方法默认使用for( ; ; )循环,只有在长度undefined才会使用for( in )

因此,我认为使用此功能时可以安全地采用正确的顺序。

示例

$(['a','b','c']).each(function() {
    alert(this);
});
//Outputs "a" then "b" then "c"

使用它的缺点是,如果你正在做一些非UI逻辑,你的函数将不能移植到其他框架。 each()函数可能最适合与jQuery选择器一起使用,否则for( ; ; )可能是明智的。


链接地址: http://www.djcxy.com/p/24523.html

上一篇: JavaScript for...in vs for

下一篇: Why does javascript turn array indexes into strings when iterating?