for (let i = 0; i < 9; i++) {
console.log(i)
}
for
循环是最早也是最通用的一种数组遍历方式,缺点是不够简洁。当我们不想从头遍历数组时,for
循环是唯一方式。
for...in
语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性。
for (const key in someArray) {
console.log(key);
}
for...in
不适合遍历数组:
const list = [1, 2, 3];
for (let i in list) {
console.log(i + 1, typeof i);
}
// expected output: "01 string"
// expected output: "11 string"
// expected output: "21 string"
list.forEach(i => console.log(typeof list.indexOf(i)));
// expected output: "number"
// expected output: "number"
// expected output: "number"
for...in
只输出包含值的键。forEach()
方法对数组的每个元素执行一次给定的函数。
someArray.forEach((elem, index) => {
console.log(elem, index);
});
使用forEach()
时要注意以下几点:
forEach()
方法按升序为数组中含有有效值的每一项执行一次回调函数,已删除或者未初始化的项将被跳过(例如稀疏数组)。forEach()
循环。for...of
语句在可迭代对象上创建一个迭代循环,并执行语句。对于数组,for...of
常是最好的选择。
for (const elem of someArray) {
console.log(elem);
}
示例:
let iterable = [10, 20, 30];
// 遍历数组索引
for (const index of iterable.keys()) {
console.log(index);
}
// 0
// 1
// 2
// 遍历数组索引和值
for (const [index, value] of iterable.entries()) {
console.log(index, value);
}
// 0, 10
// 1, 20
// 2, 30
使用for...of
循环数组有几点好处:
await
、break
、continue
关键词。https://2ality.com/2021/01/looping-over-arrays.html
https://stackoverflow.com/questions/500504/why-is-using-for-in-for-array-iteration-a-bad-idea
https://www.cnblogs.com/goloving/p/9180588.html
https://my.oschina.net/u/4593024/blog/4817930
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach