网站首页 > 基础教程 正文
作为一个前端工程师,我们经常需要遍历一个数据,这里如果是迭代对象的话就可以普通的对象有些不一样。今天我们就来学习一下。
什么是可迭代对象
可迭代对象是数组的泛化,这个概念说的是任何对象都可以被定制位可在 for of 循环中使用的对象。
数字是可迭代的,可以用 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 使用了。
猜你喜欢
- 2024-10-23 js判断对象是否为空的方法归纳 js判断对象是否为空的方法归纳数据
- 2024-10-23 JavaScript遍历对象方法总结,原来有这么多,你掌握了几种?
- 2024-10-23 33个非常实用的JavaScript一行代码,建议收藏
- 2024-10-23 「翻译」JavaScript的可视化学习之六:生成器和遍历器
- 2024-10-23 JavaScript:Object对象的属性方法
- 2024-10-23 JavaScript:ES中的对象属性、Set、Map与对象拷贝
- 2024-10-23 腾讯最爱考的前端面试题:JavaScript 基础
- 2024-10-23 JavaScript ES6 - 使用 gulp 构建脚本编码
- 2024-10-23 判断JavaScript对象属性是否存在:全方位剖析与实践策略
- 2024-10-23 Mindfusion教程:开始键入时出现的特殊语言符号的JavaScript键盘
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- mysql教程 (60)
- pythonif (68)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)