专业编程基础技术教程

网站首页 > 基础教程 正文

js中的迭代对象是什么 js迭代器iterator

ccvgpt 2024-10-23 09:25:08 基础教程 8 ℃

作为一个前端工程师,我们经常需要遍历一个数据,这里如果是迭代对象的话就可以普通的对象有些不一样。今天我们就来学习一下。

什么是可迭代对象

可迭代对象是数组的泛化,这个概念说的是任何对象都可以被定制位可在 for of 循环中使用的对象。

js中的迭代对象是什么 js迭代器iterator

数字是可迭代的,可以用 for of 循环。那么什么是 for of 循环。

let a = [22, 3];
for (let val of a) {
    console.log(val);
}

就比如上面这个写法,可以一次性把这个对象的 value直接给打印出来。

但是如果不是数组就不能这么用了。

如果是对象怎么用

比如我们有一个对象,也想用这种看上去比较合适的 for of 循环。直接 for of 不行。我们需要给对象添加一个名为Symbol.iterator的方法。这个方法就是专门用于使对象可迭代的内建 symbol。

当 for of 循环启动时,它会调用这个方法,如果没有找到,就会报错,这个方法必须返回一个迭代器,也就是iterator,一个有 next 方法的对象。

这样for of 就会取到被返回的对象。

当 for of 循环希望取得下一个数值,它就调用这个对象的 next()方法。

next()方法返回的结果的格式必须是{done: Boolean, value: any}.当 done 为 true 时,表示循环结果,否则 value 是下一个值。

改写代码

let a = {a: 1};
a[Symbol.iterator] = function () {
    let index = 0;
    let keys = Object.keys(this);
    let self = this;
    return {
        next() {
            if (index < keys.length) {
                return {
                    value: self[keys[index++]],
                    done: false
                }
            }
            else {
                return {
                    done: true
                }
            }
        }
    }
}
for (let val of a) {
    console.log(val);
}

这样一改写就可以for of 使用了。

Tags:

最近发表
标签列表