(JavaScript)Object.is() 与比较操作符 “===”、“==” 的区别

107 阅读2分钟

Object.is():

  • Object.is() 是 ECMAScript 6 (ES6) 中引入的方法,用于比较两个值是否严格相等
  • 它会考虑特殊情况,如处理 NaN 和 -0(负零)的情况。
  • Object.is() 的语法如下:Object.is(v1, v2)。它返回一个布尔值,表示两个值是否严格相等。
Object.is(7, 7);         // true
Object.is(7, ‘7’);         // false
Object.is('foo', 'foo'); // true
Object.is(null, null);   // true
Object.is(NaN, NaN);     // true
Object.is(0, -0);        // false

补充一下NaN的相关知识:

  • NaN 是 JavaScript 中的特殊值,它代表 "Not-a-Number",即不是一个数字。NaN 是一个全局对象,通常用于表示一个无效的或不可用的数字值。当某些数学操作无法产生有效的数值结果时,JavaScript 就会返回 NaN。
  • 虽然 NaN 表示一个无效的数值,但它仍然是一个特殊的 JavaScript 数据类型,可以通过 isNaN() 函数来检测一个值是否是 NaN。这个函数返回 true 如果给定的值是 NaN,否则返回 false

===(严格相等运算符):

  • === 用于比较两个值是否严格相等,它不会进行类型转换。
  • 如果两个值的类型不同或值不同,=== 会返回 false,否则返回 true
  5 === 5;      // true
 '5' === 5;    // false
  null === null; // true
  NaN === NaN;   // false
  0 === -0;      // true

==(松散相等运算符):

  • == 用于比较两个值是否相等,它会进行类型转换,尝试将操作数转换为相同的类型,然后再进行比较。
  • 这种比较方式可能会导致一些意外的结果,因为它会强制类型转换。
'5' == 5;     // true
null == undefined; // true
1 == true;    // true
0 == false;   // true

总结与思考

通过上面的例子我们可以知道,Object.is()=== 是严格相等运算符,用于判断类型与值是否相同,而==属于松散相等运算符,用于判断值是否相同,在实际应用中更推荐使用严格相等运算符

既然已经有了一个严格相等运算符===,那为什么ES6还要引入一个新的Object.is()呢? Object.is()的引入是为了处理涉及到 NaN 和 -0(负零)时的情况,在日常使用中大多数我们使用的还是===,只有遇到NaN 和 -0的特殊情况才需要使用Object.is()