Reflect.getOwnPropertyDescriptor()
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 |
瀏覽器相容性
載入中…