javascript中判断两个对象是否严格相等(即引用同一内存地址),直接用===运算符即可;它不比较内容,只检查是否指向同一对象实例,object.is在对象场景下行为与===完全一致。

JavaScript 中判断两个对象是否严格相等(即引用同一内存地址),直接用 === 运算符即可。它不比较内容,只检查两个变量是否指向同一个对象实例。
用 === 判断引用是否相同
这是最直接、最高效的方式。只要两个变量名背后是同一个对象,结果就是 true;哪怕内容完全一样但各自独立创建,结果也是 false。
-
const a = { x: 1 };和const b = a;→a === b为 true -
const a = { x: 1 };和const b = { x: 1 };→a === b为 false -
const arr1 = [1, 2]; const arr2 = arr1;→arr1 === arr2为 true
Object.is 也能判断引用相等
Object.is(a, b) 在对象场景下行为与 === 完全一致:只看是否为同一引用,不关心属性或结构。
-
Object.is({}, {})→ false -
const obj = {}; Object.is(obj, obj)→ true - 它对对象没有额外增强,和
===在引用判断上等价
为什么不用 == 或 JSON.stringify
== 对对象仍走引用比较,但存在隐式转换风险,不推荐用于对象判断;JSON.stringify 是值比较手段,且有严重缺陷:
- 函数、undefined、Symbol、NaN、循环引用会丢失或报错
- 属性顺序不同会导致结果不同:
{a:1,b:2}与{b:2,a:1}字符串化后不等 - 它根本不是引用判断,而是误用的浅层值比较
适用场景提醒
引用相等判断常用于:
- React 中
useMemo/useCallback的依赖项比对 - 状态更新前确认是否为同一对象(避免无谓重渲染)
- 事件监听器添加/移除时校验回调是否为原函数
- 缓存命中检测(如 WeakMap 键必须是对象引用)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











