== 和 === 和 Object.is()

发布于 2023-11-28 15:15:55 字数 1225 浏览 38 评论 0

比较的分类

  1. 基础数据类型(值比较;symbol 除外)
  2. 引用数据类型(引用地址比较)

===

严格相等运算符 / 全等运算符
=== 不需要进行类型转换,只有类型相同并且值相等时,才返回 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文