Open Lawguancong opened 3 years ago
严格相等运算符 / 全等运算符 === 不需要进行类型转换,只有类型相同并且值相等时,才返回 true.
相等运算符 / 非全等运算符 == 如果两者类型不同,首先需要进行类型转换。具体流程如下: • 首先判断两者类型是否相同,如果相等,判断值是否相等. • 如果类型不同,进行类型转换 • 判断比较的是否是 null 或者是 undefined, 如果是, 返回 true . • 判断两者类型是否为 string 和 number, 如果是, 将字符串转换成 number • 判断其中一方是否为 boolean, 如果是, 将 boolean 转为 number 再进行判断 • 判断其中一方是否为 object 且另一方为 string、number 或者 symbol , 如果是, 将 object 转为原始类型再进行判断
本质上,是对“严格相等运算符===“的进一步优化
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
参考链接 https://es6.ruanyifeng.com/#docs/object-methods#Object-is
比较的分类
===
严格相等运算符 / 全等运算符 === 不需要进行类型转换,只有类型相同并且值相等时,才返回 true.
==
相等运算符 / 非全等运算符 == 如果两者类型不同,首先需要进行类型转换。具体流程如下: • 首先判断两者类型是否相同,如果相等,判断值是否相等. • 如果类型不同,进行类型转换 • 判断比较的是否是 null 或者是 undefined, 如果是, 返回 true . • 判断两者类型是否为 string 和 number, 如果是, 将字符串转换成 number • 判断其中一方是否为 boolean, 如果是, 将 boolean 转为 number 再进行判断 • 判断其中一方是否为 object 且另一方为 string、number 或者 symbol , 如果是, 将 object 转为原始类型再进行判断
Object.is()
本质上,是对“严格相等运算符===“的进一步优化
特殊情况
基础数据类型 -> symbol
参考链接 https://es6.ruanyifeng.com/#docs/object-methods#Object-is