纯函数给出严格相等的参数,产生非严格相等的结果

Ran*_*lue 11 javascript

下面是一个纯函数 f,f(a) !== f(b)尽管a === b(注意严格的等式)对于某些值ab:

var f = function (x) {
   return 1 / x;
}

+0 === -0 // true
f(+0) === f(-0) // false
Run Code Online (Sandbox Code Playgroud)

这些功能的存在可能导致难以发现的错误.还有其他我应该厌倦的例子吗?

Cas*_*Chu 11

是的,因为NaN !== NaN.

var f = function (x) { return Infinity - x; }

Infinity === Infinity // true
f(Infinity) === f(Infinity) // false

f(Infinity) // NaN
Run Code Online (Sandbox Code Playgroud)

产生NaN其参数的其他一些例子可以严格相等:

0/0
Infinity/Infinity
Infinity*0
Math.sqrt(-1)
Math.log(-1)
Math.asin(-2)
Run Code Online (Sandbox Code Playgroud)


And*_*tin 6

这种行为是完全可以的,因为在数学理论中,这-0 === +0是真的,而1/(-0) === 1/(+0)不是,因为-inf != +inf

编辑:虽然我真的很惊讶javascript实际上可以处理这些类型的数学概念.

EDIT2:另外,你所描述的现象完全基于这样一个事实,你除以零,你应该至少从中得到一些奇怪的行为.