for/of

ES6添加了一个新的循环语句:for/in

for/of本质是对可迭代对象进行迭代操作 例:
for(let element of data){
    // data.push(sum)  // 这样会创造一个无穷的循环,因为迭代永远不能触及最后一个数组
    sum += element
}
若对象不可迭代,则抛出TypeError
for(let element of o){
    console.log(element) // TypeError: o is not iterable
}
若想迭代对象的属性,应使用for/in,或使用Object.keys()/values()/entries()
for(let k of Object.keys(o)){
    console.log(k)   // 注意:在循环体内修改对象向不会影响迭代的进行
}
字符串是可迭代的
let frequency = {}
for(let i of "mississippi"){
    if(frequency[i]) frequency[i]++
    else frequency[i] = 1
}
console.log(frequency)  // { m: 1, i: 4, s: 4, p: 2 }
Set(集合)与Map(映射)是可迭代的
let newSet = new Set([1, 2, 3, 4, 5, 6])
for(let i of newSet){
    console.log(i)  // 1 2 3 4 5 6
}

let newMap = new Map([["a", 1], ["b", 2], ["c", 3]])
for(let i of newMap){
    console.log(i)  // [ 'a', 1 ] [ 'b', 2 ] [ 'c', 3 ]
}

for/await/of ES2018新增了异步迭代器

从异步可迭代流中读取数据块并打印
async function printStream(stream){
    for await (let i of stream){
        console.log(i);
    }
}

 

上一篇:__time64_t 解决了 2038 年问题,可是没解决 1969年问题


下一篇:综合匿名函数 php7的call()以及yield 生成器 进行日志ip解析