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。
答案 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)
}