一、各个 for 介绍 ( O+ o V" c$ j) I" U1 Z1、for 6 E) X. a0 e: Q6 H. P) P A9 L for 循环是出现最早,也是应用最普遍的一个遍历,能够满足绝大多数的遍历。可以遍历数组、对象、字符串,示例: 7 _, m0 K& j# Y( ^! u, F* o! E
// 遍历数组
var arr = [1, 2, 3]
for (var i in arr ){
console.log(i);//0 1 2
console.log(arr[i]);//1 2 3
}
//遍历对象
var obj = {
job: 'web worker',
name:'前端代码女神'
}
for (var key in obj){
console.log(key)// job name
console.log(obj[key])// web worker 前端代码女神
}
//遍历字符串
let str = 'abc'
for (var i in str){
console.log(i) // 0 1 2
console.log(str[i]) // a b c
}
3、for ... of6 T! ~7 m' Z& x# K9 L+ e. `8 a
for ... of 语句在可迭代对象(包括 Array、Map、Set、String、TypedArray、arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。 ! ~9 M8 _' p1 g5 P/ o
// 迭代 Array
var arr = [1, 2, 3]
for (var val of arr ){
console.log(val);// 1 2 3
}
//迭代 String
let str = 'abc'
for (var val of str){
console.log(val) // a b c
}
// 迭代 TypedArray - 一个类型化数组,描述了一个底层的二进制数据缓冲区!
let iterable = new Uint8Array([0x00, 0xff]);
for (let value of iterable) {
console.log(value);//0 255
}
// 迭代 Map - 对象保存键值对,能够记住键的原始插入顺序
let map = new Map([['a',1],['b',2]])
for (let key of map) {
console.log('key',key)//['a',1] ['b',2]
}
for (let [key,value] of map) {
console.log(key) // a b
console.log(value) // 1 2
}
// 迭代 Set
let set = new Set([1,2,3,2,1])
for (let val of set) {
console.log(val)// 1 2 3
}
4、for await...of8 V9 p3 h5 e8 X5 i6 d' Z, |
创建一个循环,该循环遍历异步可迭代对象以及同步可迭代对象,包括内置的 String、Array,类数组对象(arguments 或 nodeList),TypedArray, Map, Set 和用户定义的异步/同步迭代器。它使用对象的每个不同属性的值调用要执行的语句来调用自定义迭代钩子。类似于 await 运算符一样,该语句只能在一个async function 内部使用。 & g* v9 n% N, |8 e/ A, m
async function* asyncGenerator() {
var i = 0;
while (i < 3) {
yield i++;
}
}
(async function () {
for await (num of asyncGenerator()) {
console.log(num);// 0 1 2
}
})();
5、forEach5 x$ M9 Y' P' f, p! x. _
forEach 是ES5版本发布的,按升序为数组中含有效值的每一项执行一次回调函数,那些已删除或者未初始化的项将被跳过(例如在稀疏数组上),一般认为是 普通for循环 的加强版。6 P# U7 m! Q5 K' z