怎么判断类型和引用相等
先理解原理和示例,再练习完整口述与追问。
回答要点
typeof 的边界;Array.isArray;引用与 Object.is。
原理拆解
类型判断应根据问题选择:typeof 可快速区分常见原始类型,但 null 为 object,数组也是 object。Array.isArray 判断数组,可跨常见不同窗口的数组对象;instanceof 检查构造器原型是否在对象原型链上,受跨 realm、自定义 Symbol.hasInstance 与原型修改影响。对象相等默认比较身份,深比较则必须先定义键、类型、环和特殊数值的语义。
示例与推演
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 和自定义行为会影响判断,不能当万能数据校验器。