一、迭代器
1.for in遍历:
遍历数组时,数组元素为Symbol类型的值可输出在Console中;遍历对象时,key为Symbol值时,输出key在Console中不显示,输出value可以显示这是为啥?
答:底层的具体原因暂时不清楚,但是这样会导致Symbol类型的属性值无法遍历,JSON.stringfy(obj)是Symbol属性会被排除在外。
获取Symbol属性的办法:1.Object.getOwnPropertySymbols(obj) 2. Reflect.ownKeys(obj) 但是这两个方法具体怎么实现的不清楚,有待学习!!!
2.iterator接口:
是指对象中有一个为Symbol.iterator(是一个类型为Symbol的值)的属性,该属性的值为一个方法,调用该方法后会返回一个对象。该对象上有一个next方法,指针自动指向第一个数据成员,并返回一个有 value属性和done属性的对象。
3.对对象布置iterator接口,实现自定义遍历:
let obj = {
team: 'GGG',
teammember: ['牛', '猪', '狗', '羊'], //若该属性为一个对象,则如何写?
[Symbol.iterator]() {
let index = 0;
_this = this; //此时该方法中的 this指向 obj,但是返回的对象中的 this 指向的不是 obj 所以要在外部保存一个 _this 或者将 next 方法写成加箭头函数
return {
next() {
if (index < _this.teammember.length) {
const result = {
value: _this.teammember[index],
done: false
};
index++;
return result;
} else {
return { value: undefined, done: true };
}
}
}
}
}
for (let v of obj) {
console.log(v);
}
二、生成器:生成器其实就是一个特殊的函数,解决异步编程的一种方案

生成器函数的特点:

生成器函数的实际利用:

三、promise (解决异步编程的一种方式,语法上是一个构造函数)


Promise对象的链式调用:

Promise.catch()语法糖:用于执行失败的回调
浙公网安备 33010602011771号