JavaScript中Reflect-ownKeys获取所有键名的优势

Reflect.ownKeys 是最完整、最符合规范的键名枚举方式,能获取对象自身所有字符串和 Symbol 键,严格排除原型链属性,按规范定义顺序返回,且为原子操作。Reflect.ownKeys 能获取对象自身所有类型的键名(包括字符串、Symbol),且保持与 for...in、Object.keys 等方法不同的遍历顺序和覆盖范围,是目前最完整、最符合语言规范的键名枚举方式。覆盖所有键类型,不遗漏 SymbolObject.keys 和 Object.getOwnPropertyNames 都只返回字符串键,会忽略 Symbol 类型的自有属性。而 Reflect.ownKeys 同时返回字符串和 Symbol 键:const obj = { a: 1, Symbol('b'): 2};Object.keys(obj); // 'a'Object.getOwnPropertyNames(obj); // 'a'Reflect.ownKeys(obj); // 'a', Symbol(b)严格返回"自有"属性,不污染原型链for...in 会遍历原型链上的可枚举属性,Object.keys 虽然只查自有属性,但无法识别不可枚举字符串键(如通过 Object.defineProperty 添加的 enumerable: false 属性)。Reflect.ownKeys 则完整包含所有自有属性键,无论是否可枚举、是否为字符串或 Symbol:const parent = { x: 1 };const child = Object.create(parent);Object.defineProperty(child, 'y', { value: 2, enumerable: false});childSymbol('z') = 3;Reflect.ownKeys(child); // 'y', Symbol(z)// 注意:x 不出现(非自有),y 出现(自有但不可枚举),Symbol(z) 也出现保证标准定义的枚举顺序ECMAScript 规范明确定义了 Reflect.ownKeys 的返回顺序:先按创建顺序排列整数索引(如 '0', '1'),再按添加顺序排列其余字符串键,最后按添加顺序排列 Symbol 键。这种可预测的顺序对序列化、深比较、代理拦截等场景至关重要: 幻导航网 发现优质实用网站,开启网络探索之旅!

相关推荐
是程序喵呀9 分钟前
Redis实现持久化
数据库·redis·缓存
应用市场12 分钟前
用本机跑的开源音乐模型,给安卓小游戏做 20 秒无缝循环背景音乐
android·python·游戏开发·soundpool·音频处理
小lo想吃棒棒糖12 分钟前
把 启元机器人Q1 的训练搬到昇腾 910B:从 MuJoCo 到 PPO 的一次完整迁移
人工智能·python·机器人·昇腾·具身智能
weixin_3077791320 分钟前
RAG 级联失效分析——面试中的错误归因艺术
人工智能·python·面试·职场和发展
AI创界者22 分钟前
Python 进阶实战(十八):API 网关安全与异步鉴权中间件 —— 基于 AsyncIO 的 JWT 零拷贝验权与动态黑名单过滤
人工智能·python·aigc
前端精髓32 分钟前
学会调用Qwen3.7-通用文本向量
python
z06.37 分钟前
MySQL存储引擎
数据库·mysql
小徐不徐说38 分钟前
数据库存储基础:理解表结构、主键、事务与 BLOB
开发语言·数据库·c++·qt·程序设计
JackLam42 分钟前
Gitea HTTPS 反向代理配置
数据库
量子物理学44 分钟前
oracle plsql instantclient 安装
数据库·oracle