为什么JavaScript中的“Infinity == Infinity”变为真实?

时间:2016-12-07 19:24:19

标签: javascript

据我所知,在数学中,InfinityNaN都是模糊的值。 我们所有人都知道:

console.log(NaN == NaN); //-> false

console.log(Infinity==Infinity); //-> true

我想知道为什么第二个代码的结果是true。我期待第二个的结果应该是false,但事实并非如此。

你能帮我解决一下吗? 我真的很感激。感谢。

4 个答案:

答案 0 :(得分:3)

这就是原因:

  

NaN将不等(通过==,!=,===和!==)与任何其他值(包括另一个NaN值)进行比较。使用Number.isNaN()或isNaN()可以最清楚地确定值是否为NaN。或者进行自我比较:NaN,只有NaN,将比较不等于自身。

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN

  

Infinity的初始值是Number.POSITIVE_INFINITY。无穷大(正无穷大)值大于任何其他数字。此值在数学上表现得像无穷大;例如,任何正数乘以无穷大都是无穷大,任何除以无穷大的数字都是0.

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity

您可能感兴趣的是使用isFinite的{​​{1}}方法:

Number

阅读Number.isFinite():https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite

答案 1 :(得分:1)

因为处理器以这种方式解释它。 JS中的大多数数学都遵循IEEE-754 specification for floating math arithmetic,这些处理器以非常具体的方式实现。其中包括NaN !== NaNInfinity === Infinity等。

答案 2 :(得分:1)

除了其他答案:因为规范是这样说的。

NaN是JavaScript中唯一不等于自身的值:

  

ECMAScript代码测试值X是否为NaN的可靠方法是X!== X形式的表达式。当且仅当X是NaN时,结果才为真。

http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.2.4

答案 3 :(得分:-1)

infinity被视为数值,因此infinity==infinity代表一个等于另一个的数值。虽然在普通数学中,无穷大无法与无穷大进行比较,但在javascript中它可以!

另一方面,

NaN是一种未定义的变量,而不是数字。因此NaN之间的比较在逻辑上不具有可比性。与NaN进行比较的正确方法是使用函数isNaN

示例:

isNaN(NaN) // returns true