你认为……有很大的不同吗?In和for循环?你更喜欢用哪种for ?为什么?
假设我们有一个关联数组数组:
var myArray = [{'key': 'value'}, {'key': 'value1'}];
所以我们可以迭代:
for (var i = 0; i < myArray.length; i++)
And:
for (var i in myArray)
我看不出有什么大的不同。是否存在性能问题?
你认为……有很大的不同吗?In和for循环?你更喜欢用哪种for ?为什么?
假设我们有一个关联数组数组:
var myArray = [{'key': 'value'}, {'key': 'value1'}];
所以我们可以迭代:
for (var i = 0; i < myArray.length; i++)
And:
for (var i in myArray)
我看不出有什么大的不同。是否存在性能问题?
当前回答
我会根据我想引用项目的方式使用不同的方法。
如果只需要当前项,请使用foreach。
如果需要索引器进行相对比较,请使用for。(也就是说,这与上一项/下一项相比如何?)
我从来没有注意到性能上的差异。我会等到出现性能问题时再担心。
其他回答
我曾见过使用对象、原型和数组的“for each”的问题
我的理解是for each是对象的属性,而不是数组
Douglas Crockford建议在JavaScript: The Good Parts(第24页)中避免使用for in语句。
如果使用for in遍历对象中的属性名,则结果是无序的。更糟的是:你可能会得到意想不到的结果;它包括从原型链继承的成员和方法名。
除了属性以外的所有内容都可以用. hasownproperty过滤掉。这个代码样例做了你最初可能想要的:
for (var name in obj) {
if (Object.prototype.hasOwnProperty.call(obj, name)) {
// DO STUFF
}
}
我认为你应该根据你的需要来选择迭代方法。我建议你不要用for in结构来循环原生数组。它的速度要慢得多,而且正如Chase Seibert刚才指出的那样,它与Prototype框架不兼容。
有一个关于不同循环风格的优秀基准测试,如果您使用JavaScript,绝对应该看看。不要做早期的优化,但你应该把这些东西放在你脑后的某个地方。
我将使用for in来获取对象的所有属性,这在调试脚本时特别有用。例如,当我探索不熟悉的物体时,我喜欢把这句话放在手边:
l = ''; for (m in obj) { l += m + ' => ' + obj[m] + '\n' } console.log(l);
它将整个对象的内容(连同方法体)转储到Firebug日志中。非常方便。
数组上的For in循环与Prototype不兼容。如果您认为将来可能需要使用该库,那么坚持使用for循环是有意义的。
http://www.prototypejs.org/api/array
根据使用的循环类型和浏览器的不同,会有不同的性能。
例如:
for (var i = myArray.length-1; i >= 0; i--)
在某些浏览器上几乎是以下速度的两倍:
for (var i = 0; i < myArray.length; i++)
然而,除非你的数组是巨大的,或者你不断地循环它们,所有的都足够快。我严重怀疑数组循环是你的项目(或任何其他项目)的瓶颈。