我是靠谱客的博主 健壮大叔,最近开发中收集的这篇文章主要介绍ES6自定义Symbol.iterator的实例-解决死循环问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天学习ES6的Symbol属性,顺便分享一个Symbol.iterator的实例:

这是一个用于输出下标为偶数位数值的遍历方法,但是发现这样写以后,直接进入死循环,浏览器都卡死了

//自定义Symbol的迭代器Symbol.iterator
var arr1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
//自定义遍历器,输出index为偶数的数据
var customitr = {
[Symbol.iterator](){
let index = 0;
return{
[Symbol.iterator](){return arr1},
next(){
let nextone = index;
index+=2;
return {value:arr1[nextone],done:false}
},
return(v){
console.log("next value~");
return {value:v,done:true}
}
}
}
}
for(let s of customitr){
console.log(s);
}

有两种解决办法:

第一种,人工手动解决:

其他地方保持不变,在for...of遍历时加上判断,强制for循环跳出。

for(let s of customitr){
console.log(s);
if(s == undefined) break;
}

第二种,在next方法中直接加判断让其结束,保持其他地方不变,next方法改写如下:

next(){
let nextone = index;
index+=2;
let len = arr1.length;
if(nextone <20){
//通过长度判断,超过长度直接将done置为true,结束
return {value:arr1[nextone],done:false}
}else{
return {value:'',done:true}
}
},

亲测两种方法都可以解决死循环的问题。

最后

以上就是健壮大叔为你收集整理的ES6自定义Symbol.iterator的实例-解决死循环问题的全部内容,希望文章能够帮你解决ES6自定义Symbol.iterator的实例-解决死循环问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部