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 键。这种可预测的顺序对序列化、深比较、代理拦截等场景至关重要: 幻导航网 发现优质实用网站,开启网络探索之旅!
相关推荐
李兆龙的博客1 小时前
问津集 #26:Lakebase——Postgres 的版本化页面存储、数据库分支与计算弹性数字融合2 小时前
透明化视频三维矿山井下照明重建技术yi0112 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”Marst Code3 小时前
上位机开发日记 · 第 2 篇 · 架构先行:六层分层与边界倔强的石头_4 小时前
聊聊金仓KFS:一款把数据同步软件做扎实的产品闲云野鹤在人间4 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解禾小西4 小时前
Redis:从两大维度和三大主线建立知识体系李日华大战鸡红4 小时前
FOC状态空间方程模型推导(学习记录)禾小西5 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?数据库小学妹5 小时前
数据共享交换平台选型:交换方式对比与避坑指南