zoukankan      html  css  js  c++  java
  • 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;
      };
    
  • 相关阅读:
    C#学习记录(一)
    C#学习记录(五)第一次上机实验
    C#学习记录(四)
    C#学习记录(三)
    统计代码行数
    夜深了
    写在岁末的烟花易冷
    c语言|博客作业02
    c语言I博客作业03
    设计模式之模板方法模式
  • 原文地址:https://www.cnblogs.com/ruilin/p/13868308.html
Copyright © 2011-2022 走看看