reflect.ownkeys 返回一个数组,包含对象自身所有可枚举和不可枚举的字符串键与symbol键,先按创建顺序列出字符串键,再按创建顺序列出symbol键。

Reflect.ownKeys 可以一次性获取对象所有**自有属性键名(包括字符串和 Symbol 类型)**,不包括继承属性,也不受 enumerable 限制。
它返回什么?
返回一个数组,包含对象自身所有可枚举和不可枚举的属性键(string 或 Symbol),顺序遵循:先按创建顺序列出所有字符串键(含不可枚举的),再按创建顺序列出所有 Symbol 键。
基本用法示例
直接传入目标对象即可:
const obj = { a: 1, b: 2 };Object.defineProperty(obj, 'c', { value: 3, enumerable: false });
const sym = Symbol('d');
obj[sym] = 4;
console.log(Reflect.ownKeys(obj));
// ['a', 'b', 'c', Symbol(d)]
与 Object.keys / Object.getOwnPropertyNames / Object.getOwnPropertySymbols 的区别
-
Object.keys():只返回可枚举的字符串键 -
Object.getOwnPropertyNames():返回所有字符串键(含不可枚举),但不含 Symbol -
Object.getOwnPropertySymbols():只返回所有自有 Symbol 键 -
Reflect.ownKeys():等价于[...Object.getOwnPropertyNames(obj), ...Object.getOwnPropertySymbols(obj)],且保持统一顺序
实际使用建议
- 需要完整遍历对象所有自有键(尤其涉及 Symbol 属性时),优先用
Reflect.ownKeys - 配合
getOwnPropertyDescriptor可安全读取每个键的属性描述符,包括不可枚举或 Symbol 键 - 注意:它不递归,只作用于目标对象自身,不会访问原型链
- 对 null 或 undefined 会抛出 TypeError,使用前建议做类型判断
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











