reflect不提供对象相等判断方法,它仅封装底层操作如get、set、ownkeys等;判断对象相等需用===(引用)、object.is(严格值)、或递归深比较,reflect未扩展此能力。

Reflect 本身不提供判断两个对象是否相等的方法。
Reflect 没有 isEqual 或类似 API
Reflect 是 ES6 引入的一组静态工具对象,用于封装部分底层操作(如 get、set、has、ownKeys 等),但它**不包含对象比较功能**。它不是用来做值比较的,也不替代 Object.is 或深比较逻辑。
判断对象相等该用什么?
JavaScript 中对象默认按引用比较,两个不同对象即使内容完全一样,=== 或 == 也返回 false。你需要根据场景选择合适方式:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
浅比较(仅自身可枚举属性):可用
Object.keys(a).length === Object.keys(b).length && Object.keys(a).every(key => b.hasOwnProperty(key) && a[key] === b[key]) -
严格相等(包括 Symbol 属性和不可枚举属性):可用
Object.getOwnPropertyNames(a).concat(Object.getOwnPropertySymbols(a))配合Object.getOwnPropertyDescriptor对比描述符 -
深比较(嵌套对象/数组):需递归或使用成熟库(如 Lodash 的
_.isEqual) -
简单场景下快速判断是否同一对象:直接用
a === b
Object.is 和 Reflect 的关系?
Object.is(a, b) 是 JS 原生的严格相等判断(比 === 更精确,能区分 +0 和 -0,且 NaN === NaN 为 true),但它依然只适用于基本类型或同一引用的对象,不能用于两个不同对象的内容比较。Reflect 并未扩展或替代这个能力。
别误用 Reflect.ownKeys 做相等判断
有人尝试用 Reflect.ownKeys(a) 获取所有自有属性(含 Symbol),再逐个对比值——这看似“用了 Reflect”,但本质仍是手动浅比较,且容易忽略属性 descriptor(如 writable、enumerable)、getter/setter、原型链等细节。这不是 Reflect 的设计目的,也不等价于“对象相等”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










