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?