Javascript 自定义迭代器不适用于数组对象
在上面的代码中,我正在为我创建的数组对象编写一个自定义迭代器。但是,它一直在为数组使用内置的Symbol.iterator,为什么会出现这种情况 这是我尝试运行自定义迭代器时的输出Javascript 自定义迭代器不适用于数组对象,javascript,arrays,iterator,Javascript,Arrays,Iterator,在上面的代码中,我正在为我创建的数组对象编写一个自定义迭代器。但是,它一直在为数组使用内置的Symbol.iterator,为什么会出现这种情况 这是我尝试运行自定义迭代器时的输出 正如您所知,它运行的是内置迭代器,而不是我制作的自定义迭代器 这就是你出错的地方 您认为您没有覆盖数组。[Symbol.iterator]-您的控制台.log证明您确实覆盖了 for(数组的i)抛出一个错误uncaughttypeerror:array不可编辑,因为您的代码是错误的 在next()返回的内容中,您还
正如您所知,它运行的是内置迭代器,而不是我制作的自定义迭代器 这就是你出错的地方
数组。[Symbol.iterator]
-您的控制台.log
证明您确实覆盖了for(数组的i)
抛出一个错误uncaughttypeerror:array不可编辑
,因为您的代码是错误的next()
返回的内容中,您还交换了done
和value
的含义value
应该是值undefined
而不是字符串“undefined”
array[Symbol.iterator]
需要是一个函数,但由于最后的()
var数组=[1,2,3,4,6,6,6,6];
数组[Symbol.iterator]=函数(){
设电流=0;
返回{
下一个:()=>{
如果(当前!=此.length){
返回{value:this[current++],done:false};
}else if(当前===此.length){
返回{value:undefined,done:true};
}否则{
console.log('有东西坏了!')
}
}
};
};
for(让我来看看数组){
控制台日志(i);
}
你是如何尝试“使用”这个迭代器的?在第一行结束后删除这个2
数字。@Azhy ya知道为什么会有这个数字,但这没什么区别。问题是你在使用中的…并认为这在使用你的代码-它没有。for…in
语句迭代对象的所有非符号、可枚举属性。其中,for…of
语句创建了一个循环,循环遍历iterable对象——这就是为什么我20分钟前问你如何使用它——你似乎忽略了它,最后,数组[Symbol.iterator]
需要是一个函数,但因为}()代码>您已将其设置为ObjectFor循环只是“测试”代码,以显示其工作情况-与实际用例无关:p但已将其设置为Completeness否,您是对的,答案应使用“正确”代码原则:p
var array = [1, 2, 3, 4, 6, 6, 6, 6, 6];
array[Symbol.iterator] = (function() {
var current = 0;
console.log('executed')
var iterator = {
next: function() {
var iteratorObject = {
done: "undefined",
value: false
};
//returns the next item in the sequence
if (current != this.length) {
iteratorObject.done = this[current];
current++;
//return false
return iteratorObject;
} else if (current === this.length) {
//finished
//return true
iteratorObject.done = "undefined";
iteratorObject.value = true;
return iteratorObject;
} else {
console.log('something broke!')
}
}
}
return iterator;
})();