据我所知,在数学中,Infinity
和NaN
都是模糊的值。
我们所有人都知道:
console.log(NaN == NaN); //-> false
而
console.log(Infinity==Infinity); //-> true
我想知道为什么第二个代码的结果是true
。我期待第二个的结果应该是false
,但事实并非如此。
答案 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 !== NaN
和Infinity === 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