lterator的形式
使用iterator的原因:数组遍历可以用for循环,对象遍历用for in,iterator可以统一遍历的方法。
<script>
const it=[11,22][Symbol.iterator]();
console.log(it.next());//{value: 11, done: false}
console.log(it.next());//{value: 22, done: false}
console.log(it.next());//{value: undefined, done: true}//循环完毕
console.log(it.next());//{value: undefined, done: true}
</script>
iterator不同next一次次调用遍历下一个成员。用for(成员of 数组)
内部实现的机理:和while循环一起用
const it=[11,22,33][Symbol.iterator]();
// 用while循环进行遍历
let next =it.next();
while(!next.done){
console.log(next.value);
next=it.next() ;
};
封装好的for(of)
const it=[11,22,33][Symbol.iterator]();
for(let item of it){
console.log(item);
}
for of的应用
和break,continue 一起用,而foreach无法和break ,continue一起用
<script>
const a =[11,22,33];
for(item of a){
//for of 可以和break continue一起用
// if(item==11){
// break;
// }
if(item==22){
continue;
}
console.log(item);
}
// foreach不可以和continue,break一起用
// a.forEach(function(item){
// if(item==22){
// continue; //报错
// }
// console.log(item);
// })
</script>
获得数组的值和索引
// 获得数组的索引,数组点keys(),方法需要圆括号
for (index of a.keys()){
console.log(index);
}
// 获得数组数值,数组点keys(),方法需要圆括号
for (value of a.values()){
console.log(value);
}
// 获得数组的索引和数值,数组点keys(),方法需要圆括号
for (all_item of a.entries()){
console.log(all_item);
}