Reflect.getOwnPropertyDescriptor()

Reflect.getOwnPropertyDescriptor() 静态方法类似于 Object.getOwnPropertyDescriptor()。如果该属性存在于对象中,它将返回该属性的属性描述符;否则返回 undefined

尝试一下

语法

js
Reflect.getOwnPropertyDescriptor(target, propertyKey)

参数

target

要查找属性的目标对象。

propertyKey

要获取其自有属性描述符的属性名称。

返回值

如果该属性作为 target 的自有属性存在,则返回一个属性描述符对象;否则返回 undefined

异常

TypeError

如果 target 不是对象,则抛出该异常。

描述

Reflect.getOwnPropertyDescriptor() 提供了获取对象属性描述符的反射语义。与 Object.getOwnPropertyDescriptor() 的唯一区别在于如何处理非对象目标。Reflect.getOwnPropertyDescriptor() 如果目标不是对象,则会抛出一个 TypeError,而 Object.getOwnPropertyDescriptor() 会将其强制转换为对象。

Reflect.getOwnPropertyDescriptor() 调用 target[[GetOwnProperty]] 对象内部方法

示例

使用 Reflect.getOwnPropertyDescriptor()

js
Reflect.getOwnPropertyDescriptor({ x: "hello" }, "x");
// {value: "hello", writable: true, enumerable: true, configurable: true}

Reflect.getOwnPropertyDescriptor({ x: "hello" }, "y");
// undefined

Reflect.getOwnPropertyDescriptor([], "length");
// {value: 0, writable: true, enumerable: false, configurable: false}

与 Object.getOwnPropertyDescriptor() 的区别

如果此方法的 target 参数不是对象(原始值),则会导致 TypeError。对于 Object.getOwnPropertyDescriptor,非对象第一个参数首先会被强制转换为对象。

js
Reflect.getOwnPropertyDescriptor("foo", 0);
// TypeError: "foo" is not non-null object

Object.getOwnPropertyDescriptor("foo", 0);
// { value: "f", writable: false, enumerable: true, configurable: false }

规范

规范
ECMAScript 语言规范
# sec-reflect.getownpropertydescriptor

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅