Reflect.ownKeys()

Baseline 已廣泛支援

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

Reflect.ownKeys() 靜態方法返回 target 物件自身屬性鍵的陣列。

試一試

const object = {
  property1: 42,
  property2: 13,
};

const array = [];

console.log(Reflect.ownKeys(object));
// Expected output: Array ["property1", "property2"]

console.log(Reflect.ownKeys(array));
// Expected output: Array ["length"]

語法

js
Reflect.ownKeys(target)

引數

目標

要從中獲取自身鍵的目標物件。

返回值

一個包含 target 物件自身屬性鍵的 Array,包括字串和 Symbol。對於大多數物件,陣列的順序如下:

  1. 非負整數索引,按遞增的數字順序(但作為字串)
  2. 其他字串鍵,按屬性建立順序
  3. Symbol 鍵,按屬性建立順序。

異常

TypeError

如果 target 不是一個物件,則丟擲。

描述

Reflect.ownKeys() 提供了檢索物件所有屬性鍵的反射語義。它是唯一一種可以透過一次呼叫獲取所有自身屬性——可列舉和不可列舉、字串和 Symbol——而不進行額外過濾的方法。例如,Object.getOwnPropertyNames() 使用 Reflect.ownKeys() 的返回值並過濾出僅包含字串值,而 Object.getOwnPropertySymbols() 則過濾出僅包含 Symbol 值。由於普通物件實現 [[OwnPropertyKeys]] 以在 Symbol 鍵之前返回所有字串鍵,因此 Reflect.ownKeys(target) 通常等同於 Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target))。但是,如果物件具有自定義的 [[OwnPropertyKeys]] 方法(例如透過代理的 ownKeys 處理器),則鍵的順序可能會有所不同。

Reflect.ownKeys() 呼叫 target[[OwnPropertyKeys]] 物件內部方法

示例

使用 Reflect.ownKeys()

js
Reflect.ownKeys({ z: 3, y: 2, x: 1 }); // [ "z", "y", "x" ]
Reflect.ownKeys([]); // ["length"]

const sym = Symbol.for("comet");
const sym2 = Symbol.for("meteor");
const obj = {
  [sym]: 0,
  str: 0,
  773: 0,
  0: 0,
  [sym2]: 0,
  "-1": 0,
  8: 0,
  "second str": 0,
};
Reflect.ownKeys(obj);
// [ "0", "8", "773", "str", "-1", "second str", Symbol(comet), Symbol(meteor) ]
// Indexes in numeric order,
// strings in insertion order,
// symbols in insertion order

規範

規範
ECMAScript® 2026 語言規範
# sec-reflect.ownkeys

瀏覽器相容性

另見