Object.getOwnPropertyDescriptor()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

靜態方法 Object.getOwnPropertyDescriptor() 返回一個描述給定物件上特定屬性的配置的物件(即,直接存在於物件上,不在物件的原型鏈上的屬性)。返回的物件是可變的,但修改它不會影響原始屬性的配置。

試一試

const object = {
  foo: 42,
};

const descriptor = Object.getOwnPropertyDescriptor(object, "foo");

console.log(descriptor.configurable);
// Expected output: true

console.log(descriptor.value);
// Expected output: 42

語法

js
Object.getOwnPropertyDescriptor(obj, prop)

引數

obj

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

prop

要檢索其描述的屬性的名稱或 Symbol

返回值

如果給定屬性存在於物件上,則返回該屬性的屬性描述符,否則返回 undefined

描述

此方法允許檢查屬性的精確描述。JavaScript 中的屬性由一個字串值名稱或一個 Symbol 和一個屬性描述符組成。有關屬性描述符型別及其屬性的更多資訊,請參見 Object.defineProperty()

屬性描述符是一個包含以下部分或全部屬性的記錄:

value

與屬性相關聯的值(僅限資料描述符)。

可寫

當且僅當與屬性相關聯的值可以被更改時為 true(僅限資料描述符)。

get

一個用作屬性的 getter 函式,如果沒有 getter 則為 undefined(僅限訪問器描述符)。

set

一個用作屬性的 setter 函式,如果沒有 setter 則為 undefined(僅限訪問器描述符)。

可配置

當且僅當此屬性描述符的型別可以更改,並且該屬性可以從相應物件中刪除時為 true

可列舉

當且僅當此屬性出現在相應物件上的屬性列舉中時為 true

示例

使用 Object.getOwnPropertyDescriptor()

js
let o, d;

o = {
  get foo() {
    return 17;
  },
};
d = Object.getOwnPropertyDescriptor(o, "foo");
console.log(d);
// {
//   configurable: true,
//   enumerable: true,
//   get: [Function: get foo],
//   set: undefined
// }

o = { bar: 42 };
d = Object.getOwnPropertyDescriptor(o, "bar");
console.log(d);
// {
//   configurable: true,
//   enumerable: true,
//   value: 42,
//   writable: true
// }

o = { [Symbol.for("baz")]: 73 };
d = Object.getOwnPropertyDescriptor(o, Symbol.for("baz"));
console.log(d);
// {
//   configurable: true,
//   enumerable: true,
//   value: 73,
//   writable: true
// }

o = {};
Object.defineProperty(o, "qux", {
  value: 8675309,
  writable: false,
  enumerable: false,
});
d = Object.getOwnPropertyDescriptor(o, "qux");
console.log(d);
// {
//   value: 8675309,
//   writable: false,
//   enumerable: false,
//   configurable: false
// }

非物件強制型別轉換

在 ES5 中,如果此方法的第一個引數不是物件(原始型別),它將導致 TypeError。在 ES2015 中,第一個引數為非物件時,首先會被強制轉換為物件。

js
Object.getOwnPropertyDescriptor("foo", 0);
// TypeError: "foo" is not an object  // ES5 code

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

規範

規範
ECMAScript® 2026 語言規範
# sec-object.getownpropertydescriptor

瀏覽器相容性

另見