据我所知,在数学上Infinity
和NaN
都是模糊的值。 因为我们都知道:为什么JavaScript中的“Infinity == Infinity”成为现实?
console.log(NaN == NaN); //-> false
而
console.log(Infinity==Infinity); //-> true
我不知道为什么第二个代码的结果是true
。我期待第二个的结果应该是false
,但事实并非如此。
您能否帮我解决。 我真的很感激它。谢谢。
据我所知,在数学上Infinity
和NaN
都是模糊的值。 因为我们都知道:为什么JavaScript中的“Infinity == Infinity”成为现实?
console.log(NaN == NaN); //-> false
而
console.log(Infinity==Infinity); //-> true
我不知道为什么第二个代码的结果是true
。我期待第二个的结果应该是false
,但事实并非如此。
您能否帮我解决。 我真的很感激它。谢谢。
除了其他answe rs:因为规格如此。
NaN
是JavaScript中的唯一值,该值不等于本身:
为ECMAScript的代码来测试一个值是否X是NaN的形式X的表达的可靠方式== X.当且仅当X是NaN时,结果才是真的。
http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.2.4
因为处理器这样解释它。 JS中的大部分数学遵循IEEE-754 specification for floating math arithmetic,处理器以非常特定的方式实现。其中包括NaN !== NaN
和Infinity === Infinity
。
infinity
被视为一个数值,因此infinity==infinity
代表一个数值相等。在常见的数学中,无穷大无法与无穷大进行比较,在JavaScript中它可以!
NaN
另一方面,是一种未定义的变量,而不是一个数字。因此,NaN
之间的比较在逻辑上不具可比性。与NaN
进行比较的正确方法是使用功能isNaN
。
实施例:
isNaN(NaN) // returns true
这不是真的。实际上,'Infinity'和'NaN'都是数字和数字值。规范只是将'NaN'视为不等于自身(以及任何其他值)。 – Xufox
这就是为什么:
NaN的比较不等(通过==,=,===,和==!)为任何其他值 - - 包括另一个NaN值。使用Number.isNaN()或isNaN()可以最清楚地确定值是否为NaN。或者进行自我比较:NaN,只有NaN,会比较不等于自身。
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN
无限的初始值是Number.POSITIVE_INFINITY。 Infinity(正无穷大)值大于其他任何数值。该值在数学上表现为无穷大;例如,乘以无限任意的正数为无穷大,任何大除以无穷大0
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity
中使用的Number
的isFinite
方法是什么,你可能也有兴趣:
Number.isFinite(Infinity); // false
Number.isFinite(NaN); // false
上Number.isFinite()读了起来:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite
这是最完整的答案,恕我直言,最好的解释。 – Yuck
您的意思是'Infinity',不'infinity'? – Timo
@Timo 是的,我的意思是“无限”。 – Rshin
基本上,NaN表示数字操作的任何可能的非数字结果。 NaN不等于NaN更有意义,因为不是每个非数字结果都是逻辑等价的。 Infinity的定义更为清晰,虽然人们可能会争论无穷大的基数,但数字线极限的概念在数学上与自身相当。 – PMV