for (let i = 0; i < arr.length; ++i)
arr.forEach((v, i) => { /* ... */ })
for (let i in arr)
for (const v of arr)
区别:
- for循环 和 for in 遍历的是
下标
。for of 访问 的是元素
,forEach()可同时访问下标
和元素
。 - 针对
非数字属性
,for in
不会忽略,其他三个
会忽略。(非数字属性就是给数组这个object 添加属性。)因此用它不好
。 - 针对
空元素
,['a',,'c']
这种类型的空元素,for循环与for of不会跳过
,for in与forEach会跳过
。对于['a', undefined, 'c']
,4 种循环语法一致
,打印的都是”a, undefined, c”。 函数的 this
: for循环,for/in与for/of会保留外部作用域的this。forEach,不使用箭头函数时this指向会变化。return 无效
:forEach无法用break/return退出
,不适合遍历查找特殊值进行返回的场景。应该用filter.
其他遍历方法:
Array.prototype.map
用法:
const array1 = [1, 4, 9, 16];
const map1 = array1.map(x => x * 2);
console.log(map1);
console.log(array1)
不会跳过空元素
const array1 = [1, 4,, 9, 16];
const map1 = array1.map(x => x * 2);
console.log(map1);
console.log(array1)