JavaScript-myArray.forEach与for循环的细微差别-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

JavaScript-myArray.forEach与for循环的细微差别

2020-02-08 13:51:03 221 1

我已经看到很多建议使用的问题:

for (var i = 0; i < myArray.length; i++){ /* ... */ } 代替:

for (var i in myArray){ /* ... */ } 对于数组,由于迭代不一致(请参见此处)。

但是,我似乎找不到任何似乎更喜欢面向对象循环的东西:

myArray.forEach(function(item, index){ /* ... */ }); 对我来说,这似乎更直观。

对于我当前的项目,IE8的兼容性很重要,我正在考虑使用Mozilla的polyfill,但是我不确定100%如何工作。

现代浏览器的for循环标准(上面的第一个示例)与Array.prototype.forEach实现之间是否有区别? 现代浏览器实现与上面链接到的Mozilla的实现(特别是IE8)之间是否有区别? 性能并不是问题,只是迭代属性的一致性。 问题来源于stack overflow

取消 提交回答
全部回答(1)
  • 保持可爱mmm
    2020-02-08 13:51:16

    for循环和forEach方法之间最实质的区别在于,对于前者,您可能会break跳出循环。您可以continue通过简单地从传递给的函数返回来进行模拟forEach,但是无法完全停止循环。

    除此之外,两者有效地实现了相同的功能。由于变量提升,另一个小差异涉及for循环中索​​引的范围(以及所有包含变量的范围)。

    // 'i' is scoped to the containing function for (var i = 0; i < arr.length; i++) { ... }

    // 'i' is scoped to the internal function arr.forEach(function (el, i) { ... }); 但是,我发现它forEach更具表现力-它表示您遍历数组的每个元素的意图,并且为您提供了对该元素的引用,而不仅仅是索引。总体而言,它主要取决于个人喜好,但是如果可以使用forEach,我建议您使用它。

    这两个版本之间还有一些实质性差异,特别是在性能方面。实际上,forEach如本jsperf测试所示,简单的for循环的性能要比方法好得多。

    是否需要这种性能取决于您自己决定,在大多数情况下,我倾向于表现力胜于速度。此速度差异可能是由于在稀疏数组上进行操作时基本循环与方法之间的较小语义差异所致,如本答案所述。

    如果您不需要行为forEach和/或需要尽早突破循环,则可以使用Lo-Dash _.each作为替代,它也可以跨浏览器工作。如果您使用的是jQuery,它还提供了一个类似的$.each,只需注意每个变体中传递给回调函数的参数的差异。

    (对于forEachpolyfill,如果您选择使用那条路线,它应该可以在较旧的浏览器中正常工作。)

    0 0
相关问答

1

回答

JavaScript 类数组对象的定义?

2020-04-04 10:34:37 546浏览量 回答数 1

1

回答

JavaScript关联数组的长度

2020-02-09 14:05:51 371浏览量 回答数 1

1

回答

如何将JavaScript对象的属性值提取到数组中?

2020-02-09 12:58:43 260浏览量 回答数 1

1

回答

旋转JavaScript中数组中的元素

2020-02-09 11:56:06 248浏览量 回答数 1

1

回答

在JavaScript中获得两个数组的并集

2020-02-09 11:40:10 215浏览量 回答数 1

1

回答

对象是否以javascript的深层或浅层副本推送到数组中?

2020-02-08 22:00:58 259浏览量 回答数 1

2

回答

有没有办法使用JavaScript以相反的顺序在数组上使用map()?

2020-02-08 21:51:58 442浏览量 回答数 2

2

回答

在Javascript中,将NodeList转换为数组的最佳方法是什么

2020-02-08 20:37:57 472浏览量 回答数 2

1

回答

Javascript按两个字段对数组进行排序

2020-02-08 20:32:20 252浏览量 回答数 1

1

回答

如何在Javascript中获取数组键?

2020-02-08 20:25:51 221浏览量 回答数 1
66
文章
12595
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载