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 键。这种可预测的顺序对序列化、深比较、代理拦截等场景至关重要: 幻导航网 发现优质实用网站,开启网络探索之旅!
相关推荐
微学AI2 分钟前
时序大模型 TimechoAI 赋能工业时序数据底层技术优势与实操ptc学习者4 分钟前
python 中描述符@property property 大概的样子zmzb01035 分钟前
Python课后习题训练记录Day129北顾笙98013 分钟前
MYSQL-day03MXsoft61813 分钟前
**混合云统一监控实践:私有云+公有云的一体化运维方案**秋928 分钟前
Python工程师面试常问提问和回答(AI工程化方向 · 2026版)炎武丶航31 分钟前
LeNet-5深度学习详解:从手写数字识别到代码实战sitellla31 分钟前
Pydub:用 Python 处理音频,不写废话瀚高PG实验室35 分钟前
java中间件无法连接数据库ULIi096kr38 分钟前
MySQL大表优化终极方案:单表数据量上限、卡顿解决、分表分库实战教程