Reflect.getOwnPropertyDescriptor()

Baseline 已廣泛支援

此特性已非常成熟,可在多種裝置和瀏覽器版本上使用。自 ⁨2016 年 9 月⁩以來,它已在各大瀏覽器中可用。

Reflect.getOwnPropertyDescriptor() 靜態方法與 Object.getOwnPropertyDescriptor() 類似。如果給定屬性存在於物件上,它將返回該屬性的屬性描述符;否則,返回 undefined

試一試

const object = {
  property1: 42,
};

console.log(Reflect.getOwnPropertyDescriptor(object, "property1").value);
// Expected output: 42

console.log(Reflect.getOwnPropertyDescriptor(object, "property2"));
// Expected output: undefined

console.log(Reflect.getOwnPropertyDescriptor(object, "property1").writable);
// Expected output: true

語法

js
Reflect.getOwnPropertyDescriptor(target, propertyKey)

引數

目標

要在其中查詢屬性的目標物件。

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® 2026 語言規範
# sec-reflect.getownpropertydescriptor

瀏覽器相容性

另見