for循环 | for of | forEach | map | for in | |
---|---|---|---|---|---|
定义 | 写法不简洁,代码可读性差 | 不需要索引的情况,直接使用for...of ,代码高效明了。 | 改变了原数组 没有返回值 | 有返回值,可以return 出来 | 遍历对象,最常用的就是for...in ,遍历到对象的key,根据key获取value。 |
性能 | for > for of > forEach > map > for in | ||||
原因 | 因为没有额外的函数调用和上下文,所以性能是最快的 | 具有iterator接口的数据结构,可以使用它来迭代成员,直接读取键值 | 是for的语法糖,还有许多参数和上下文,因此会慢一些。forEach、map等不支持跳出循环 | 返回的是一个等长的全新数组,数组创建和赋值产生的性能开销较大。一个数组映射成另一个数组 ,使用 map、filter 等方法,支持链式调用 | 性能较差,因为需要列举对象的所有性能,有转化过程,所有开销较大。 对于纯 |
1、for循环
- for (let [key, value] of arr.entries()) {
- // do sth
- }
和
- arr.forEach((value, key) => {
- // do sth
- });
相比,后者比较简洁。
foreach 是 for 的封装。
封装的作用就是抽象,让代码可读性更好
2、for of
不需要索引的情况,直接使用for...of
,代码高效明了。
- function for_of_数组() {
- var arr = ['a', 'b', 'c', 'd'];
-
- for (let a of arr) {
- console.log(a); // a b c d
- }
- }
- // for_of_数组()
-
3、forEach