• Object.is()与===


    有一篇面经中提到面试官提问,如何判断两个变量相等?

    在ES6之前,我们使用===来判断两个变量是否相等。ES6中增加了一个方法Object.is(val1,val2)来比较两个变量。那么两者有什么不同之处呢

    ECMA规范中的Object.is()执行过程如下:

    /* Object.is(x,y)
    1、If Type(x) is different from Type(y), return false. //比较类型,不同返回false。typeof x/y
    2、If Type(x) is Number, then
      a、If x is NaN and y is NaN, return true.     //NaN与NaN相等
      b、If x is +0 and y is -0, return false.      //+0与-0不相等
      c、If x is -0 and y is +0, return false.      //-0与+0不相等
      d、If x is the same Number value as y, return true.   //数字类型,值不同则不相等
      e、Return false.
    3、Return SameValueNonNumber(x, y).
    */
    
    /* sameValueNonNumber(x,y)
    1、Assert: Type(x) is not Number.   //x不是数字
    2、Assert: Type(x) is the same as Type(y).      //x与y类型相同
    3、If Type(x) is Undefined, return true.        //如果typeof x是undefined,则y也是undefined,两者相等
    4、If Type(x) is Null, return true.             //typeof x是Null,则y也是Null,则两者相等
    5、If Type(x) is String, then                   //字符类型的,值相同则相等
      If x and y are exactly the same sequence of code units (same length and same code units at corresponding indices), return true; otherwise, return false.
    6、If Type(x) is Boolean, then                 //boolean,值相同则相等
      If x and y are both true or both false, return true; otherwise, return false.
    7、If Type(x) is Symbol, then                 //symbol类型的,值相同则相等
      If x and y are both the same Symbol value, return true; otherwise, return false.
    8、If x and y are the same Object value, return true. Otherwise, return false. //object类型的,同一个对象则相等
    */
    

      

    ===运算符的规范如下:

    /* 
    1、If Type(x) is different from Type(y), return false.
    2、If Type(x) is Number, then
      a、If x is NaN, return false.
      b、If y is NaN, return false.
      c、If x is the same Number value as y, return true.
      d、If x is +0 and y is -0, return true.
      e、If x is -0 and y is +0, return true.
      f、Return false.
    3、Return SameValueNonNumber(x, y). 
    */
    

      

    ===与Object.is()主要差别是NaN、+0、-0这几个特殊的数字类型上。如果是需要判断这几个值,可以选择Object.is(),其他情况下,依然推荐使用===

  • 相关阅读:
    HTML标签
    进程&线程&协程
    04 jQuery的属性操作
    03 jQuery动画效果
    02 jQuery的选择器
    01 jQuery的介绍
    软件测试入门-测试模型(V型 W型 H型)
    软件测试概述
    软件测试基础理论
    17 案例
  • 原文地址:https://www.cnblogs.com/Jamie1032797633/p/11839402.html
Copyright © 2020-2023  润新知