ES6-11 Symbol、iterator、forOf、typeArray
…剩余运算符
const obj1 = {a: 1,b: 2
}
const obj2 = {a: 100,b: 2,c: 300
}
const obj = {...obj1,...obj2
}
console.log(obj) // 和Object.assign(obj, obj1, obj2)结果相同
[Symbol.hasInstance]
Symbol构造函数上的属性,默认调用了方法
iterator迭代器
- 对数据结构读取的一种方式,是有序的,连续的,基于拉取的一种消耗数据的组织方式
const arr = [1, 2, 3]
const iterFn = arr[Symbol.iterator] // 方法
console.log(iterFn)
const iter = arr[Symbol.iterator]()
console.log(iter) // 对象
console.log(iter.next()) // 迭代结果
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())
有序的数据类型
- 数组
- 类数组:arguments、nodeList、Map、Set、weakMap、weakSet
在不知道数据长度情况下,无法用for循环进行遍历 - 自定义迭代器
// 这个写法不对?
const arr = [1, 2, 3]
function makeIterator(arr) {let index = 0return {next() {return {value: index < arr.length ? arr[index++] : undefined,done: index < arr.length ? false : true}}}
}
const iter = makeIterator(arr)
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())
二进制数据
- js中没有typeArray和typedArray
- typeArray类型数组
const tArray = new Int8Array(8) // 8进制数据
console.log(tArray)
for…of遍历接口
- 只要部署了iterator接口
let arr = [1, 2, 3]
for (let i of arr) {console.log(i) // 1 2 3
}
- 注意for…in拿的是下标,用来遍历对象
- for…of拿到值,用来迭代部署了iterator接口的数据类型
- 对象是无序的、非连续的,是不可迭代的
为对象部署iterator
- 可以用…展开
- 或者用for of迭代
let obj = {start: [1, 3, 2, 4],end: [5, 7, 6],[Symbol.iterator]() {let index = 0,arr = [...this.start, ...this.end],len = arr.length;return {next() {if (index < len) {return {value: arr[index++],done: false}} else {return {value: undefined,done: true}}// 不能这么写,会少迭代一次// return {// value: index < len ? arr[index++] : undefined,// done: index < len ? false : true// }}}}
}
console.log(...obj) // 1 3 2 4 5 7 6
for (let val of obj) {console.log(val)
}
- 使用iter.next()完成迭代后,再使用for of遍历,据说有可能会失败,这种场景遇到了再记录
注意事项
- 最后一行为什么打印出空,因为在前面的代码中迭代已经完成了
ES6-11 Symbol、iterator、forOf、typeArray相关推荐
- SE API第10/11天:集合 ——>ArrayListals、Iterator遍历迭代器、增强for、List集→subList、集合间转换asList、排序sort | Map相关
一.Java 集合框架 0.介绍: (0)什么是集合 -集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便. (1)集合框架被设计成要满足以下几个目标: 该框架必须是高性能的. ...
- ES6 Symbol类型的应用、symbol属性名的遍历、Symbol.for()Symbol.keyFor()
目录 Symbol类型 介绍 Symbol.prototype.description Symbol的应用 1 给对象内追加属性 2 消除魔术字符串 symbol属性名的遍历 Symbol.for() ...
- 浅谈 JavaScript、ECMAScript (ES5、ES6)是什么、相互关系
一.ECMAScript 和 JavaScript 的关系 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. ES6 === ECMAScript6 ...
- JavaScript 中的 require / exports、import / export、浅谈JavaScript、ES5、ES6
Node.js 的基础教学 之 exports 和 module.exports:https://zhuanlan.zhihu.com/p/82057593 浅谈 JavaScript.ES5.ES6 ...
- ES6基础语法(let、const、解构赋值、模板字符串、简化对象、箭头函数、扩展运算符)(一)
系列文章目录 第二章:ES6深入(Symbol.类.迭代器.Set.Map)(二) 第三章:ES6深入(生成器.Promise.async/await)(三) 第四章:ES6+新增API拓展(对象AP ...
- ES6 (十三)Set 和 Map 数据结构、WeakSet 和 WeakMap、WeakRef、FinalizationRegistry
ES6 (十三)Set 和 Map 数据结构.WeakSet 和 WeakMap.WeakRef.FinalizationRegistry 文章目录 ES6 (十三)Set 和 Map 数据结构.We ...
- H5新增、CSS3以及ES5、ES6新增特性
1.H5新增 新增特性:语义化标签.音视频处理API.canvas.拖拽释放API.history API.地理位置API.webSocket.web存储的localStorage和SessionSt ...
- JavaSE——类集(上)(Collection、List、Iterator、forEach)
第2节 集合(上) 因为已经有数据结构的基础,前面有关数据结构的知识就不单独整理了,直接上Java的集合类的知识. 一.类集(集合类) 1.1 集合概述 集合: 集合是java中提供的一种容器,可以用 ...
- 【Java 集合】ArrayList、LinkedList、Stack、Queue、Set、Map, 迭代器 Iterable、Iterator,Collections类
集合类型 数组的局限性 ArrayList(常用方法 + 基本使用) ArrayList - retainAll ArrayList - toArray ArrayList 的遍历(5种) Array ...
- Java 集合 Collection、Iterator
Java集合分为Set(无序.不可重复).List(有序.重复).Queue(队列)和Map(映射关系) Java集合概述 数组元素既可以是基本类型的值,也可以是对象(实际保存对象的引用变量) 集合只 ...
最新文章
- 赠书 | 读懂生成对抗神经网络 GAN,看这文就够了
- matlab命名文件保存在哪里,用Matlab给整个文件夹下的文件分别重命名
- DES加密解密与AES加密解密
- 系统命名与 SQL 命名之争 - 第 1 部分
- 空间站是如何绕地飞行的?张朝阳物理课开播啦
- sfc流程图怎么画_sfc第四次超级机器人大战流程图
- js常用内建对象之:String对象
- 李开复看衰语音识别 这些国内外巨头却有话要说!
- AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用
- MYSQL 无重复插入数据更新语法 sql一句话使insert时若主键重复则更新
- wps忘保存关闭,数据恢复步骤
- 学习计算机基本知识,怎样按序学习计算机基本知识
- 2023面试官常考的前端面试题
- java中堆和堆栈的区别
- Python数据分析上机
- Qt运行提示QGtkStyle was unable to detect the current GTK+ theme.解决方法
- RHEL 7系统审计、系统日志文件、服务安全及打补丁 AIDE 系统入侵检测
- 数据压缩作业:H.264视频格式分析
- 安卓开发之屏蔽按键抖动,连击,长按事件
- CentOS双网卡双IP设置
热门文章
- html制作翻页效果代码,使用原生JS实现滚轮翻页效果的示例代码
- picturectrl控件中加载图片并显示_如何在EasyX窗体中显示图片
- python怎么创建一个二维数组_python 创建二维数组的方法
- 伪静态php配置,PHP开启伪静态配置
- 5.Lambert光照Diffuse Shader
- (五)Unity插件生成
- 从零认识单片机(9)
- Django 下添加左侧字段显示和搜索
- oracle-group by -having
- 2018.01.01(数字三角形,最长上升子序列等)