Appearance
Object 拓展
在 ECMAScript2015 标准中 Object 原型上拓展了一个 Object.keys()
方法去获取对象中可遍历的键数组,那么在 ECMAScript2017 的时候就继续拓展了操作值(Object.values
) 和 键值对(Object.entries()
)的两个方法
Object.values()
语法
Object.values(obj)
参数
- obj
被返回可枚举属性值的对象
返回值
一个包含对象自身的所有可枚举属性值的数组。
注意
- 只能获取对象自身且可枚举的属性的值
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)
}
Object.entries()
语法
Object.entries(obj)
参数
- obj
被返回可枚举属性值的对象
返回值
一个包含对象自身的所有可枚举属性的键值对数组。 [ [key,value],[key,value]... ]
注意
- 只能获取对象自身且可枚举的属性的值
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
栗子
- 简单的栗子
js
const obj = Object.create({
a: 1,
})
obj.b = 2
Object.defineProperty(obj, "c", {
value: 3,
enumerable: false,
})
console.log(Object.getOwnPropertyDescriptors(obj))