集合引用类型

5 阅读4分钟

1.  Object:一般使用点语法存取,也可以使用中括号来存取属性

注意:在使用对象字面量表示对象时,并不会实际调用Object构造函数

2. Array:

注意:与对象一样,在使用数组字面量表示法创建数组不会掉用Array构造函数

2.1 from():用于将类数组结构,即任何可迭代的结构,或者有一个length属性和可索引元素的结构,转换为数组实例

//字符串转换为单字符数组

Array.from(‘Matt’) //[‘M’, ‘a’,’t’,’t’]

//将集合和映射转换为一个新数组

const m = new Map().set(1,2).set(3,4)

const s = new Set().add(1).add(2).add(3).add(4)

Array.from(m) //[[1,2], [3,4]]

Array.from(s) // [1,2,3,4] 

//对数组进行浅复制

const a1 = [1,2,3,4]

const a2 = Array.from(a1)

console.log(a1) // [1,2,3,4]

console.log(a1 === a2) //false

// 可以使用任何可迭代对象 const iter = { 

  *[Symbol.iterator]() {

    yield 1;

    yield 2;

    yield 3;

    yield 4;

} }; 

console.log(Array.from(iter)); // [1, 2, 3, 4]

// arguments 对象可以被轻松地转换为数组 function getArgsArray() { 

      return Array.from(arguments);

    }

    console.log(getArgsArray(1, 2, 3, 4)); // [1, 2, 3, 4]

// from()也能转换带有必要属性的自定义对象 const arrayLikeObject = { 

      0: 1,

      1: 2,

      2: 3,

      3: 4,

      length: 4

    };

    console.log(Array.from(arrayLikeObject)); // [1, 2, 3, 4]

//Array.from()还接收第二个可选的映射函数参数

const a1 = [1, 2, 3, 4];  
const a2 = Array.from(a1, x => x**2);

2.2 of():用于将一组参数转换为数组实例,旨在替代ES6之前的Array.prototype.slice.call(arguments)

console.log(Array.of(1,2,3,4)) //[1,2,3,4]

2.3  Array.isArray():确定一个值是否为数组

2.4  迭代器方法:keys(),values(),entries()

const a = [‘foo’, ‘bar’, ‘baz’]

// 因为这些方法都返回迭代器,所以可以将它们的内容 

// 通过Array.from()直接转换为数组实例  
const aKeys = Array.from(a.keys());  // [0, 1, 2, ]  
const aValues = Array.from(a.values());  //[‘foo’, ‘bar’, ‘baz’]

const aEntries = Array.from(a.entries());  //[[0, ‘foo’], [1, ‘bar’], [2, ‘baz’]]

2.5  批量复制方法:copyWithin();填充数组方法:fill()

2.6  转换方法:toLocaleString(),toString(),valueOf()

2.7  连接方法:join()

2.8  栈方法:后进先出,最近添加的项最先被删除

push:接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度

pop:用于删除数组的最后一项,同时减少数组的length,返回被删除的项

 2.9队列方法:先进先出,末尾添加数据,从列表开头获取数据

shift:删除数组的第一项并返回它,然后数组长度减1

unshift:在数组开头添加任意多个值,然后返回新的数组长度

注意:shifit和push组合可以把数组当作队列来使用,unshift和pop组合可以在相反方向模拟队列

2.10 排序方法:

reverse: 将数组元素反向排列

sort:默认情况,在每一项调用String函数后决定顺序(即便都是数值),最小的在前,最大的在后;也可以传入比较函数

2.11 操作方法:

   concat:默认情况下,将数组打平后,添加到副本数组的末尾,返回一个新数组

   slice:返回开始索引到结束索引对应的所有元素

   splice:参数顺序:开始位置,要删除元素的数量和要插入的任意多个元素,返回被删除的元素的数组(如果没有删除元素,则返回空数组)

2.12 搜索和位置方法:indexOf(),lastIndexOf(),includes(),都可接收两个参数:要查找的元素和一个可选的起始的搜索位置

2.13:断言函数:find(),findIndex()

2.14迭代方法:参数:以每一项为参数运行的函数,以及可选的作为函数运行上下文的作用域对象(影响函数中this的值)

every:每一项函数都返回true,则返回true

filter:函数返回true的项会组成数组后返回

forEach:没有返回值

map():返回由每次函数调用的结果构成的数组

some():如果有一项返回true,则返回true

2.15 归并方法:reduce():从第一项开始遍历到最后一项,reduceRight():与reduce()相反

 

3. 定型数组:目的是提升向原生库传输数据的效率

3.1  Float32Array:可以允许javascript运行时访问一块名为ArrayBuffer的预分配内存。JavaScript 运行时使用这个类型可以分配、读取和写入数组。 这个数组可以直接传给底层图形驱动程序 API,也可以直接从底层获取到 

ArrayBuffer:ArrayBuffer 是所有定型数组及视图引用的基本单位。

ArrayBuffer():是一个普通的javascript构造函数,可用于在内存中分配特定数量的字节空间。一经创建,就不能再改变大小