JavaScript集合引用类型

154 阅读3分钟

集合引用类型

数组

最简单的内存数据结构

将类数组转换为数组

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

  • 内存占用

      MapObject多存储50%的key/value
    
  • 插入性能

      Map性能更佳
    
  • 查找速度

      Object更佳
    
  • 删除性能

      Map更佳
    

WeakMap

weak是指JavaScript垃圾回收程序对待‘弱映射’中键的方式。只要键存在,键值就会存在于映射当中,不会当作垃圾回收。

使用

  • 私有变量
  • DOM节点元数据

Set

加强的Map

顺序与迭代

  • 维护值插入时的顺序,按顺序迭代

WeakSet

集合数据结构,weak是指JavaScript垃圾回收程序对待‘弱集合’中值的方式。

迭代与扩展

4种原生集合类型定义了默认迭代器

  • Array
  • ArrayBuffer ShredArrayBuffer
  • Map
  • Set

在ECMAScript中Object是所有对象的基类