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 键。这种可预测的顺序对序列化、深比较、代理拦截等场景至关重要: 幻导航网 发现优质实用网站,开启网络探索之旅!
相关推荐
Marst Code25 分钟前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?databook30 分钟前
当散点图不够用时:用 t-SNE 可视化多维数据爬也要爬着前进2 小时前
redis主从搭建@Mike@2 小时前
02-数据库学习笔记(SQL引擎)我的xiaodoujiao3 小时前
快速学习Python基础知识详细图文教程9--函数进阶踏月的造梦星球3 小时前
达梦数据库执行计划与性能分析入门:EXPLAIN、AUTOTRACE 与 ET笃行3503 小时前
国产化落地避坑 · 干货向|Oracle 迁金仓 KES,我把外连接消除排在隐性陷阱第一位weixin_408099673 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)老纪的技术唠嗑局4 小时前
花一年时间整理出的:AI 数据库混合搜索入门实践去码头整点薯条ing4 小时前
某当网登录滑块【协议+OCR】