它的工作流程是:
1.创建一个指针对象,指向数据结构中的起始位置
2.调用next方法指向下一个数据,直到指向的数据没有时,结束位置。
<script>
let obj = {
a : 1,
b: 2,
c: 3
}
// console.log(Object.keys(obj));
obj[Symbol.iterator] = function(){
// 迭代协议
let values = Object.values(obj);
let index = 0;
return {
next(){ // 这里不是自定义的名称
if(index >= values.length){
return {
// value: "1", // 循环过程中的值
done: true // 代表循环是否完成
}
}else{
return{
done :false,
value: values[index++]
}
}
}
}
}
let va = obj[Symbol.iterator]();
console.log(va.next());
console.log(va.next());
console.log(va.next());
console.log(va.next());
console.log(va.next());
for(let val of obj){
console.log(val);
}
</script>
它有三个作用:
1.它可以为数据结构提供访问接口
2.可为数据有序排列
3.可用于for of循环和…rest参数