23.ES8 对象方法扩展

 

ES8 对象方法扩展

ES8 扩展的对象方法:

  1. Object.values(): 方法返回一个给定对象的所有可枚举属性值的数组

  2. Object.entries(): 返回一个给定对象自身可遍历属性 [key,value] 的数组

  3. Object.getOwnPropertyDescriptors(): 该方法返回指定对象所有自身属性的描述对象

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// 声明对象
const student = {
name: "Tom",
subject: ["math", "history", "chemistry"],
hobby: ["reading", "running", "soccer"]
}

// 获取对象所有的键
console.log(Object.keys(student));
// (3) ['name', 'subject', 'hobby']

// 获取对象所有的值
console.log(Object.values(student));
// (3) ['Tom', Array(3), Array(3)]

// entries
console.log(Object.entries(student));
// (3) [Array(2), Array(2), Array(2)]
// 0: (2) ['name', 'Tom']
// 1: (2) ['subject', Array(3)]
// 2: (2) ['hobby', Array(3)]
// length: 3
// [[Prototype]]: Array(0)

// 创建 Map
const m = new Map(Object.entries(student));
console.log(m);
// Map(3) {'name' => 'Tom', 'subject' => Array(3), 'hobby' => Array(3)}


// 对象属性的描述对象
console.log(Object.getOwnPropertyDescriptors(student));
// {name: {…}, subject: {…}, hobby: {…}}
// hobby: {value: Array(3), writable: true, enumerable: true, configurable: true}
// name: {value: 'Tom', writable: true, enumerable: true, configurable: true}
// subject: {value: Array(3), writable: true, enumerable: true, configurable: true}
// [[Prototype]]: Object

const obj = Object.create(null, {
name: {
// 设置值
value: "test_object",
// 对象属性特性
writable: true, // 是否允许修改
configurable: true, // 是否允许删除
enumerable: true // 是否允许枚举
}
});
console.log(obj);
// {name: 'test_object'}