是Object.is(x,y)比其他比较快吗?

时间:2019-07-11 06:23:58

标签: javascript ecmascript-6

因此在JavaScript中,我们有三个相等比较运算符。我一直在阅读ECMAScript规范,并研究它们的工作方式。有什么事打击了我。内置函数Object.is()的比较步骤较少,比其他运算符更早终止的可能性。那么这是否使Object.is()的运行速度比其他运算符更快?

以下是规范摘要:

Object.is()

  
      
  1. 如果Type(x)与Type(y)不同,则返回false。
  2.   
  3. 如果Type(x)为Number,则

         

    a。如果x为NaN而y为NaN,则返回true。

         

    b。如果x为+ 0,y为-0,则返回false。

         

    c。如果x为-0且y为   +0,返回假。

         d。如果x与y相同,则返回true。

         

    e。返回false。

  4.   
  5. 返回SameValueNonNumber(x,y)。
  6.   

宽松等于==

  

比较x == y,其中x和y是值,产生true或   假。这样的比较如下:

     
      
  1. 如果Type(x)与Type(y)相同,则

         

    a。返回执行严格相等比较x === y的结果。

  2.   
  3. 如果x为null且y未定义,则返回true。
  4.   
  5. 如果x未定义且y为空,则返回true。
  6.   
  7. 如果Type(x)为Number而Type(y)为String,则返回比较结果x ==! ToNumber(y)。
  8.   
  9. 如果Type(x)为String,Type(y)为Number,则返回比较结果! ToNumber(x)== y。
  10.   
  11. 如果Type(x)为布尔值,则返回比较结果! ToNumber(x)== y。
  12.   
  13. 如果Type(y)为Boolean,则返回比较结果x ==! ToNumber(y)。
  14.   
  15. 如果Type(x)是字符串,数字或符号,而Type(y)是Object,则返回比较结果x == ToPrimitive(y)。
  16.   
  17. 如果Type(x)是Object并且Type(y)是String,Number或Symbol,则返回比较结果ToPrimitive(x)== y。
  18.   
  19. 返回false。
  20.   

严格等于===

  

比较x === y,其中x和y是值,产生true或   假。这样的比较如下:

     
      
  1. 如果Type(x)与Type(y)不同,则返回false。

  2.   
  3. 如果Type(x)为Number,则

         

    a。如果x为NaN,则返回false。

         

    b。如果y为NaN,则返回false。

         

    c。如果x与y相同,则返回true。

         d。如果x为+ 0,y为-0,则返回true。

         

    e。如果x为-0,y为+0,则返回true。

         

    f。返回false。

  4.   
  5. 返回SameValueNonNumber(x,y)。

  6.   

1 个答案:

答案 0 :(得分:2)

规范中较少的步骤并不一定意味着实施中的步骤较少。各种优化都适用于此。因此,最后,我们只能做race the horses!(在您实际的用例中,某些综合while(true) Object.is(1, 1);不会产生任何有用的结果)。如果确实(明显)更快,它是否会使您的代码更好,例如是

      Object.is(user.age, 3)

更清晰
      user.age === 3