Object.is的原理分析

壹 ❀ 前言


今日在一篇文章中看到这么一个问题: 如何判断两个变量相等?。我的第一反应是这个还不简单,直接全等===不就完事了;但是还有个问题:如果是 +0 === -0(true),NaN === NaN (false)呢。这样不就无法区分+0和-0不相等以及两个NaN的变量相等了吗?于是写下这篇文章希望更多的园友知道判断两个变量相等不只有全等还有Object.is()。

贰 ❀ 初识Object.is()


  • MDN的定义:

    Object.is() 方法判断两个值是否为同一个值

Object.is()的用法与全等===基本一致,唯有不同的两点:
1.+0与-0为false
2.NaN与NaN为true

  • 注意:

0和+0是一样的,但是0和-0是不一样的

特例

Object.is(0, -0);            // false
Object.is(+0, -0);           // false
Object.is(0, +0);            // true
Object.is(NaN, 0/0);         // true

叁 ❀ Object.is() 的实现原理


  Object.is = function(x, y) {
    if (x === y) {
      // 1/+0 = +Infinity, 1/-0 = -Infinity, +Infinity不等于-Infinity
      // Infinity 属性用于存放表示正无穷大的数值。负无穷大是表示负无穷大一个数字值。
      return x !== 0 || 1 / x === 1 / y;
    } 
      // 一个变量不等于自身变量,那么它一定是 NaN
      // 两个都是NaN的时候返回true
      return x !== x && y !== y;
  };
原文地址:https://www.cnblogs.com/ruilin/p/13868308.html