Map
Map 构造器,构造 map 对象。
const map = new Map()
console.log(map)
Entries:存放属性
size:属性的数量
get():获取值
has():是否有某个键名(属性)
keys():获取所有的键名
set():设置值
value():获取键名对应的键值
Symbol(Symbol.iterator):可迭代协议(for of 必须支持这个协议才可以使用)
...
const m = new Map()
m.set('a',1)
m.set('b',2)
m.set('c',3)
for (const [key,value] of m) {
console.log(key,value)
}
// 对象只能 for in 枚举,不能 for of 迭代遍历,因为不具有(类似于数组的)原则性顺序
const obj = {
a: 1,
b: 2,
c: 3
}
for (const key in obj) {
console.log(key,obj[key])
}
如果想要强行使用 for of 遍历对象,可以在原型上添加可迭代协议。
// ES6 生成器方式实现
Object.prototype[Symbol.iterator] =
function* () {
let keys = Object.keys(this)
for (const key of keys) {
yield [key, this[key]]
}
}
const obj = {
a: 1,
b: 2,
c: 3
}
for (const [key,value] of obj) {
console.log(key,value);
}
迭代器和生成器
迭代器(Iterator)是一种对象,它提供了一种遍历集合(如数组或集合)的方法。它提供了一种顺序访问集合中的元素,且不必在访问完毕后显式地关闭迭代器。这意味着,我们可以通过调用迭代器的 next()
方法多次来遍历集合中的元素,每次调用 next()
方法都会返回下一个元素。
生成器(Generator)是 JavaScript 中的一种特殊函数,它允许我们创建一种可以暂停和恢复的函数。当一个函数被声明为生成器时,它会在执行到 yield
语句时暂停,并返回一个值给调用者。当再次调用生成器时,它会从上次暂停的地方继续执行,直到再次遇到 yield
语句。
const arr = [1, 2, 3]
function* generator(arr) {
for (let i = 0; i < arr.length; i++) {
yield arr[i]
}
}
const iterator = generator(arr)
console.log(iterator.next())
console.log(iterator.next())
console.log(iterator.next())
console.log(iterator.next())