怎么判断类型和引用相等

先理解原理和示例,再练习完整口述与追问。

typeof 的边界;Array.isArray;引用与 Object.is。

类型判断应根据问题选择:typeof 可快速区分常见原始类型,但 null 为 object,数组也是 object。Array.isArray 判断数组,可跨常见不同窗口的数组对象;instanceof 检查构造器原型是否在对象原型链上,受跨 realm、自定义 Symbol.hasInstance 与原型修改影响。对象相等默认比较身份,深比较则必须先定义键、类型、环和特殊数值的语义。

js
console.log(typeof null) // object
console.log(Array.isArray([])) // true
console.log({} === {}) // false
console.log(Object.is(NaN, NaN)) // true
console.log(Object.is(0, -0)) // false

两个内容相同的对象不是同一引用;业务里比较两条记录是否同一实体,通常应该比较稳定 ID,而不是深扫所有字段。

Object.prototype.toString 也可能受 Symbol.toStringTag 影响,不是安全认证工具。JSON.stringify 相同不等于所有类型的对象都深度相等。

typeof null 是 object,数组用 Array.isArray,typeof 函数为 function。=== 比较对象时看引用,不做深内容比较;Object.is 与 === 的主要差异包括 NaN 和正负零。instanceof 依赖原型关系,跨 realm 和自定义行为会影响判断,不能当万能数据校验器。