javascript运算符===和lodash方法_.eq()之间的区别?

时间:2017-06-19 06:56:43

标签: javascript ecmascript-6 comparison lodash

javascript中的===比较器和lodash中的_.eq()方法有区别吗?

_。eq()Link

  

在两个值之间执行SameValueZero比较以确定是否   它们是等价的。

更新

不确定是否检查相同的类型,例如===运算符。

  

7.2.10SameValueZero(x,y)#

     

内部比较抽象操作SameValueZero(x,y),其中   x和y是ECMAScript语言值,产生true或false。这样的   比较如下:

     

如果Type(x)与Type(y)不同,则返回false。如果Type(x)是   数字,那么如果x是NaN而y是NaN,则返回true。如果x是+0和y   是-0,返回true。如果x是-0且y是+0,则返回true。如果x是   与y相同的数值,返回true。返回false。返回   SameValueNonNumber(x,y)。注意SameValueZero与SameValue不同   只在处理+0和-0。

     

7.2.11SameValueNonNumber(x,y)#

     

内部比较抽象操作SameValueNonNumber(x,y),   其中x和y都不是Number值,产生true或false。这样   比较如下:

     

断言:类型(x)不是数字。断言:类型(x)与类型(y)相同。   如果Type(x)是Undefined,则返回true。如果Type(x)为Null,则返回true。   如果Type(x)是String,那么如果x和y完全相同的序列   代码单元(相应索引的长度和代码单位相同),   返回true;否则,返回false。如果Type(x)是布尔值,那么If x   和y都是真的或都是假的,都是真的;否则,返回   假。如果Type(x)是Symbol,那么如果x和y都是相同的Symbol   价值,返回真实;否则,返回false。如果x和y,则返回true   是相同的Object值。否则,返回false。

1 个答案:

答案 0 :(得分:4)

Loadash _.eq也会检查NaN的相等性。

_.eq(NaN, NaN) =>真

NaN === NaN =>假

https://github.com/lodash/lodash/blob/6cb3460fcefe66cb96e55b82c6febd2153c992cc/eq.js#L32

function eq(value, other) {
  return value === other || (value !== value && other !== other)
}