Reflect.ownKeys()
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。對於大多數物件,陣列的順序如下:
- 非負整數索引,按遞增的數字順序(但作為字串)
- 其他字串鍵,按屬性建立順序
- 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 |
瀏覽器相容性
載入中…