Skip to content

Object 拓展

在 ECMAScript2015 标准中 Object 原型上拓展了一个 Object.keys()方法去获取对象中可遍历的键数组,那么在 ECMAScript2017 的时候就继续拓展了操作值(Object.values) 和 键值对(Object.entries())的两个方法

Object.values()

语法

Object.values(obj)

参数

  • obj

被返回可枚举属性值的对象

返回值

一个包含对象自身的所有可枚举属性值的数组。

注意

  1. 只能获取对象自身可枚举的属性的值

for in遍历到对象prototype可枚举的属性,而 Object.values()只能遍历本身可枚举的属性

js
const obj = Object.create({
  a: 1,
})

obj.b = 2

Object.defineProperty(obj, "c", {
  value: 3,
  enumerable: false,
})

console.log(obj)

console.log(Object.values(obj))

for (key in obj) {
  console.log(key)
}

image-20210706163530710

Object.entries()

语法

Object.entries(obj)

参数

  • obj

被返回可枚举属性值的对象

返回值

一个包含对象自身的所有可枚举属性的键值对数组。 [ [key,value],[key,value]... ]

注意

  1. 只能获取对象自身可枚举的属性的值

for in遍历到对象prototype可枚举的属性,而 Object.values()只能遍历本身可枚举的属性

js
const obj = Object.create({
  a: 1,
})

obj.b = 2

Object.defineProperty(obj, "c", {
  value: 3,
  enumerable: false,
})

console.log(obj)

console.log(Object.entries(obj)) // [['b',2]]

Object.getOwnPropertyDescriptors()

语法

Object.getOwnPropertyDescriptors(obj)

参数

  • obj

被返回可枚举属性描述符的对象

返回值

所指定对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象

js
interface ObjectPropertyDescriptor {
  configurable: boolean,
  enumerable: boolean,
​​  value: any,
​​  writable: boolean,
}

interface ObjectPropertyDescriptors {
  [propName: string] : ObjectPropertyDescriptor
}

type getOwnPropertyDescriptors<T> = (obj : T) => ObjectPropertyDescriptors

栗子

  1. 简单的栗子
js
const obj = Object.create({
  a: 1,
})

obj.b = 2

Object.defineProperty(obj, "c", {
  value: 3,
  enumerable: false,
})

console.log(Object.getOwnPropertyDescriptors(obj))

image-20210706164238055