== 和 === 和 Object.is()
比较的分类
- 基础数据类型(值比较;symbol 除外)
- 引用数据类型(引用地址比较)
===
严格相等运算符 / 全等运算符
=== 不需要进行类型转换,只有类型相同并且值相等时,才返回 true.
==
相等运算符 / 非全等运算符
== 如果两者类型不同,首先需要进行类型转换。具体流程如下:
- 首先判断两者类型是否相同,如果相等,判断值是否相等
- 如果类型不同,进行类型转换
- 判断比较的是否是 null 或者是 undefined,如果是,返回 true
- 判断两者类型是否为 string 和 number,如果是,将字符串转换成 number
- 判断其中一方是否为 boolean,如果是,将 boolean 转为 number 再进行判断
- 判断其中一方是否为 object 且另一方为 string、number 或者 symbol,如果是,将 object 转为原始类型再进行判断
Object.is()
本质上,是对 严格相等运算符 === 的进一步优化
Object.is('foo', 'foo') // true Object.is({}, {}) // false 不同之处只有两个:一是+0 不等于-0,二是 NaN 等于自身。 +0 === -0 //true NaN === NaN // false Object.is(+0, -0) // false Object.is(NaN, NaN) // true const a = { name: 'haha' }; const b = a const c = { name: 'haha' }; Object.is(a, b); // true Object.is(a, c); // false Object.is(b, c); // false
特殊情况
基础数据类型 -> symbol
const sym1 = Symbol(123); const sym2 = sym1; const sym3 = Symbol(123); sym1 === sym2; // true sym1 === sym3; // false sym2 === sym3; // false Object.is(sym1, sym2); // true Object.is(sym1, sym3); // false Object.is(sym2, sym3); // false
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论