Reflect.ownKeys()

Reflect.ownKeys() 静态方法返回一个包含 target 对象自身属性键的数组。

试一试

语法

js
Reflect.ownKeys(target)

参数

target

要从中获取自身键的目标对象。

返回值

一个包含 target 对象自身属性键的 Array,包括字符串和符号。对于大多数对象,该数组将按以下顺序排列:

  1. 非负整数索引,按递增数字顺序排列(但以字符串形式)
  2. 其他字符串键,按属性创建顺序排列
  3. 符号键,按属性创建顺序排列。

异常

TypeError

如果 target 不是对象,则抛出。

描述

Reflect.ownKeys() 提供了检索对象所有属性键的反射语义。它是唯一一种无需额外过滤逻辑即可在一次调用中获取所有自身属性(可枚举和不可枚举,字符串和符号)的方法。例如,Object.getOwnPropertyNames() 获取 Reflect.ownKeys() 的返回值并将其过滤为仅保留字符串值,而 Object.getOwnPropertySymbols() 则将其过滤为仅保留符号值。因为普通对象实现 [[OwnPropertyKeys]] 以在符号键之前返回所有字符串键,所以 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 语言规范
# sec-reflect.ownkeys

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅