可索引的集合对象

这些对象表示按照索引值来排序的数据集合,包括数组、类型数组,以及类数组结构的对象。


Array

所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。

  • JavaScript 的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象。
  • 数组 37 个方法,具体参考 文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
slice方法
*/
[1,2,3,4,5,6].slice(2) // [3, 4, 5, 6]
[1,2,3,4,5,6].slice(2,5) // [3, 4, 5]
[1,2,3,4,5,6].slice(-2) // [5, 6]
[1,2,3,4,5,6].slice(6) // []
/*
判断是否为数组
*/
Array.isArray([])
/*
浅层次复制数组的 3 种方法--->浅层次指非二维数组或包含对象
*/
var arr=[1,2,3]
var newarr = [...arr]// 方法1
var newarr = Object.assign([],arr)// 方法2
var newarr = arr.slice()||arr.slice(0);// 方法3
/*
深层次复制数组(防止代码污染)
*/
JSON.parse(JSON.stringify(arr))
/*
判断数组是否包含某个元素(2 种方法)
*/
var o={},a=[],arr=[o,a,123]
// 方法1
arr.indexOf(o) // 返回下标,不存在是 -1,不可以写成 arr.indexOf({}) arr.indexOf([])
// 方法2
arr.includes(a) // 存在 true,不存在 false,不可以写成 arr.includes({}) arr.includes([])

TypedArray(类型化数组)

类型化数组是一组类似数组的对象,用于操作二进制数据缓冲区(如 Int8ArrayUint8ArrayFloat32Array 等)。

1
2
3
4
const buffer = new ArrayBuffer(8); // 8字节缓冲区
const int32View = new Int32Array(buffer);
int32View[0] = 42;
console.log(int32View); // Int32Array(2) [42, 0]

Set

Set 对象允许你存储任何类型的唯一值,无论是原始值还是对象引用。

1
2
3
4
5
const s = new Set([1,2,3,3,2]);
s.add(4);
s.has(2); // true
s.delete(1);
console.log([...s]); // [2,3,4]

Map

Map 对象保存键值对,并且键可以是任何类型。

1
2
3
4
5
const m = new Map();
m.set('a', 1);
m.set({x:1}, 2);
m.get('a'); // 1
m.size; // 2

WeakSet

WeakSet 只接受对象作为成员,并且成员都是弱引用,适合临时存储对象。

1
2
3
4
5
const ws = new WeakSet();
let obj = {};
ws.add(obj);
ws.has(obj); // true
obj = null; // obj 被垃圾回收

WeakMap

WeakMap 只接受对象作为键,键名是弱引用,适合存储对象的私有数据。

1
2
3
4
5
const wm = new WeakMap();
let key = {};
wm.set(key, 123);
wm.get(key); // 123
key = null; // key 被垃圾回收

结构化数据

这些对象用来表示和操作结构化的缓冲区数据,或使用 JSONJavaScript Object Notation)编码的数据。


JSON

  • JSON.parse():将 JSON 字符串解析为对象
  • JSON.stringify():将对象序列化为 JSON 字符串
    • JSON.stringify({name:112233,age:"26"},null,2) // JSON 格式化,2 是两个缩进的意思
1
2
3
const obj = {name: "张三", age: 18};
const str = JSON.stringify(obj); // '{"name":"张三","age":18}'
const obj2 = JSON.parse(str); // {name: "张三", age: 18}

更多标准内置对象请参考 MDN 文档