ES8新增了Object.keys()、Object.values()、Object.entries()、Object.getOwnPropertyDescriptors()、Object.getOwnPropertyDescriptor()等方法来对对象进行扩展;
先来声明一个对象
const play = {
name: "狼人杀",
player: ["女巫","狼人","猎人","守卫","村民","预言家"]
}
1. Object.keys()方法获取对象所有的键名 , 该方法返回一个数组,包含对象所有可枚举的(enumerable)键名
const keys = Object.keys(play);
console.log(keys);
2. Object.values()方法获取对象所有的键值 ,该方法返回一个数组,包含对象所有的值,包括数组和函数
const values = Object.values(play);
console.log(values);
3. Object.entries()方法获取对象所有键值对 ,该方法返回一个数组,包含对象所有键值对,数组的每一项是一个数组,包含两个元素,第一个元素是键,第二个元素是值
const entries = Object.entries(play);
console.log(entries);
4. 可以通过Object.entries()方法获取对象所有键值对,然后通过map()方法遍历,得到每个键值对的键和值(快速创建一个Map)
console.log(m); // Map(2) {"name" => "狼人杀", "player" => Array(6)}
console.log(m.get("name")); // "狼人杀"
console.log(m.get("player")); // Array(6) ["女巫", "狼人", "猎人", "守卫", "村民", "预言家"]
5. 对象属性的描述结果
1. Object.getOwnPropertyDescriptors()方法返回一个对象,其属性与对象所有自身属性(非继承属性)相关联,每个属性都有一个描述对象,描述对象的属性如下:
value:属性的值
writable:属性是否可写
enumerable:属性是否可枚举
configurable:属性是否可配置
console.log(Object.getOwnPropertyDescriptors(play));
2. Object.getOwnPropertyDescriptor()方法返回指定对象上一个自身属性的描述对象,该方法接受两个参数,第一个参数是要获取描述对象的对象,第二个参数是要获取描述对象的属性名。
const descriptor = Object.getOwnPropertyDescriptor(play, "name");
console.log(descriptor);