集合引用类型
数组
最简单的内存数据结构
将类数组转换为数组
Array=>from of
迭代器方法
Array=>keys values entries
for of
复制和填充
copyWithin fill
转换
toLocaleString toString valueOf
栈方法
LIFO=>push pop
队列方法
FIFO=>shift unshift
排序方法
sort reverse
操作方法
concat slice splice
搜索和位置方法
indexOf lastIndexOf includes
find findIndex
迭代方法
every filter forEach map some
归并方法
reduce reduceRight
数组打平方法
flat flatMap flatten
可以改变原数组的方法
push shift pop unshift concat fill sort reverse slice
不可以改变原数组的方法
map reduce some every filter flat
>=es6
reduce some every filter flat find from of copyWithin fill findindex includes includeRight flatMap flatten map set keys values entries for of @@iterator
=es5
push shift pop unshift forEach indexOf lastIndexOf splice slice concat join reverse sort
定型数组
出现背景
WebGL与JavaScript运行时之间传递数组时,WebGL绑定都需要在目标环境分配新数组,以其当前格式迭代数组,然后将数值转型为新数组中的适当格式,此流程需要花费大量时间。
ArrayBuffer
Float32Array是一种‘视图’,可以允许JavaScript运行时访问一块名为ArrayBuffer的预分配内存。ArrayBuffer是所有定型数组及视图引用的基本单位。(类似c++的malloc())
SharedArrayBuffer
是ArrayBuffer的一个变体,可以无须复制就在执行上下文传递。
DataView
允许读写ArrayBuffer的视图,专为文件I/O 网络I/O设计,API支持对缓冲数据的高度控制,对缓冲内容没有预设,也不能迭代。
const buf=new ArrayBuffer(16)
const fullDataView=new DataView(buf)
- ElementType
- 字节序
- 边界情形
二维或者多维数组
使用矩阵
对象
1.理解对象
创建对象
let person={
name:'jack',
age:26,
say(){
console.log(this.name)
}
}
2.属性的类型
2.1 数据属性
[[Configurable]]
[[Enumerable]]
[[Writable]]
[[Value]]
2.2 访问器属性
[[Configurable]]
[[Enumerable]]
[[Get]]
[[Set]]
3.定义多个属性
Object.defineProperties()
4.读取属性的特性
Object.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptors()
5.合并对象
Object.assign()
6.创建对象
工厂模式
构造函数模式
原型模式
7.对象解构
使用与对象匹配的结构来实现对属性赋值
let person={
name:'jack'
age:26
}
let {name,age}=person
Object 类型
每个Object具有的属性和方法
- constructor
- hasOwenProperty(propertyName)
- isPrototypeof(object)
- propertyIsEnumerable(properyName)
- toLocaleString()
- toString()
- valueOf()
Map
基本API
- has
- get
- set
- size
- delete
- clear
顺序与迭代
- entries
- Symbol.iterator
- keys
- values
Map VS Object
-
内存占用
Map比Object多存储50%的key/value -
插入性能
Map性能更佳 -
查找速度
Object更佳 -
删除性能
Map更佳
WeakMap
weak是指JavaScript垃圾回收程序对待‘弱映射’中键的方式。只要键存在,键值就会存在于映射当中,不会当作垃圾回收。
使用
- 私有变量
- DOM节点元数据
Set
加强的Map
顺序与迭代
- 维护值插入时的顺序,按顺序迭代
WeakSet
集合数据结构,weak是指JavaScript垃圾回收程序对待‘弱集合’中值的方式。
迭代与扩展
4种原生集合类型定义了默认迭代器
- Array
- ArrayBuffer ShredArrayBuffer
- Map
- Set
在ECMAScript中Object是所有对象的基类