【发布时间】:2016-11-03 12:12:03
【问题描述】:
我看到很多建议使用的问题:
for (var i = 0; i < myArray.length; i++){ /* ... */ }
代替:
for (var i in myArray){ /* ... */ }
对于数组,由于不一致的迭代 (see here)。
但是,我似乎找不到任何似乎更喜欢面向对象循环的东西:
myArray.forEach(function(item, index){ /* ... */ });
这对我来说似乎更直观。
对于我当前的项目,IE8 兼容性很重要,我正在考虑使用Mozilla's polyfill,但我不能 100% 确定这将如何工作。
- 标准 for 循环(上面的第一个示例)与现代浏览器的 Array.prototype.forEach 实现之间有什么区别吗?
- 现代浏览器实现与上面链接的 Mozilla 实现(特别是 IE8)之间有什么区别吗?
- 性能不是什么大问题,只是迭代的属性的一致性。
【问题讨论】:
-
不可能从
forEach中取出break。但是一个很大的优势是使用该功能创建一个新的范围。使用 polyfill 你应该没有任何问题(至少我没有遇到任何问题)。 -
旧 IE 可能遇到的问题不是 shim 本身,而是损坏的数组构造函数/文字 wrt
holes其中应该是undefined和其他损坏的方法,例如slice和hasOwnPropertywrt 到类似数组的 DOM 对象。我的测试和es5 shim显示了这种符合规范的垫片方法(未测试 MDN 的垫片)。 -
要打破
for循环,这就是some的用途。 -
“但是,我似乎找不到任何似乎更喜欢面向对象循环的东西:”我宁愿将其称为函数式方式而不是命令式方式。
-
您可以在找到第一个匹配项后使用
Array.find()跳出循环。
标签: javascript arrays for-loop internet-explorer-8 iterator