reflect.ownkeys用于获取对象所有自有属性键名(含不可枚举字符串键和所有symbol键),返回按创建顺序排列的数组:先字符串键后symbol键,不包含原型链属性、私有字段,但包含accessor键名。

Reflect.ownKeys 用于获取对象**所有自有属性的键名(包括不可枚举、Symbol 类型)**,返回一个数组,顺序遵循:先按创建顺序排列字符串键(含不可枚举),再按创建顺序排列 Symbol 键。
它和 Object.keys / Object.getOwnPropertyNames 的区别
对比更直观:
- Object.keys(obj):只返回可枚举的字符串键
- Object.getOwnPropertyNames(obj):返回所有字符串键(含不可枚举),但不含 Symbol
- Reflect.ownKeys(obj):返回全部自有键——包括可枚举/不可枚举的字符串键 + 所有 Symbol 键
基本用法示例
直接传入目标对象即可:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
Object.defineProperty(obj, 'b', { value: 2, enumerable: false });
obj[Symbol('c')] = 3;
console.log(Reflect.ownKeys(obj)); // ['a', 'b', Symbol(c)]
常用于需要完整键信息的场景
比如实现深拷贝、代理拦截、序列化或属性遍历时要确保不遗漏任何自有属性:
- 遍历所有自有属性(含不可枚举和 Symbol)时,用
Reflect.ownKeys(obj)替代for...in或Object.keys - 在 Proxy 的
ownKeystrap 中必须返回一个数组,通常就用Reflect.ownKeys(target)作为基础再过滤或添加 - 做对象结构校验或元编程时,需确认是否包含某个 Symbol 属性,
Reflect.ownKeys是唯一能自然拿到 Symbol 键的方式
注意点
它只返回“自有”键,不包含原型链上的属性;也不处理 getter/setter 本身(但会列出定义它们的键名):
- 继承来的属性不会出现
- 如果键对应的是 accessor(get/set),该键仍会被包含,只是值需通过
Object.getOwnPropertyDescriptor获取 - 不能获取私有字段(#field),这是语法级限制,与 Reflect 无关
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










