菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
345
0

ES6 迭代器

原创
05/13 14:22
阅读数 83777

1、可迭代对象指的是,可通过 for/of 循环的对象,是es6的特性,包括(数组,字符串,set对象,map对象)

2、扩展操作符...可以展开可迭代对象

let chars = [..."abcd"] // chars === ["a","b","c","d"]
let data = [1, 2, 3, 4]
Math.max(data) // 4

3、迭代器可用于解构赋值

let purple = Uint8Array.of(255, 0, 255, 128)
let [r, g, b, a] = purple // a===128

4、 迭代map对象,返回值是[key,value]对, 在for/of中可直接解构赋值

let m = new Map([["one", 1], ["two", 2]])
for (let [k, v] of m) console.log(k, v);

5、值迭代键或值,可使用keys()或values()

[...m]; // [["one", 1], ["two", 2]]
[...m.entries()]; // [["one", 1], ["two", 2]]
[...m.keys()]; // ["one","two"]
[...m.values()]; // [1,2]

6、可接收Array对象的内置函数和构造函数,可接收任意迭代器

new Set("abc"); new Set(["a", "b", "c"]); // 两者相同

7、迭代器原理

// 可迭代对象:具有迭代器的方法,且该方法返回迭代器的对象
let list1 = [1, 2]
// 迭代器对象:具有next()方法,且该方法返回迭代结果的对象list
let iterator = list1[Symbol.iterator]() //有一个Symbol.iterator方法,返回自己
// 迭代结果:具有属性value和done的对象
for (let result = iterator.next(); !result.done; result = iterator.next()) {
    console.log(result.value);
}
//
let list2 = [1, 2, 3, 4, 5]
let iter = list2[Symbol.iterator]()
console.log(iter.next().value); // 1
console.log([...iter]); // [2, 3, 4, 5]

 

发表评论

0/200
345 点赞
0 评论
收藏