为什么typeof NaN返回'数字'?
只是出于好奇。
typeof NaN
是数字似乎并不合逻辑。 就像NaN === NaN
或NaN == NaN
顺便返回false。 这是javascript的特性之一,还是会有这个原因呢?
编辑:谢谢你的答案。 尽管让人头晕目眩并非易事。 阅读答案和维基我了解得更多,但仍然是一个像
与NaN进行比较时,即使与自身进行比较,也总会返回无序的结果。 比较谓词是信令或非信令,信令版本表示这种比较的无效例外。 等式和不等式谓词是非信号的,所以x = x返回false可用于测试x是否是安静的NaN。
只是让我的头转动。 如果有人可以在人类(而不是数学家)可读的语言中翻译这个,我会很乐意。
它意味着不是一个数字。 这不是javascript的特性,而是常用的计算机科学原理。
来自http://en.wikipedia.org/wiki/NaN:
有三种返回NaN的操作:
将NaN作为至少一个操作数进行操作
不确定的形式
真实的操作和复杂的结果:
所有这些值可能不一样。 NaN的简单测试是测试value == value
false。
那么, NaN
仍然是一个数字类型,尽管它实际上代表了Not-A-Number :-)
NaN
只是意味着特定的值不能在数字类型的限制范围内表示(尽管对于所有必须进行四舍五入的数字都可以这样说,但NaN
是一种特殊情况)。
特定的NaN
不被认为与另一个NaN
相等,因为它们可能是不同的值。 但是, NaN
仍然是一个数字类型,就像2718或31415。
至于你更新的问题,以外行的话来解释:
与NaN进行比较时,即使与自身进行比较,也总会返回无序的结果。 比较谓词是信令或非信令,信令版本表示这种比较的无效例外。 等式和不等式谓词是非信号的,所以x = x返回false可用于测试x是否是安静的NaN。
所有这些意思是(分解成部分):
与NaN进行比较时,即使与自身进行比较,也总会返回无序的结果。
基本上, NaN
不等于任何其他数字,包括另一个NaN
,甚至包括其本身。
比较谓词是信令或非信令,信令版本表示这种比较的无效例外。
试图在NaN
和另一个号码之间进行比较(小于,大于等)操作可能会导致抛出异常(信号传递)或仅仅因为结果(非信令或安静)而导致错误。
等式和不等式谓词是非信号的,所以x = x返回false可用于测试x是否是安静的NaN。
对相等(等于,不等于)的测试永远不会发出信号,所以使用它们不会引起异常。 如果您有一个常规数字x
,那么x == x
将始终为真。 如果x
是一个NaN
,那么x == x
将始终为假。 它为您提供了一种轻松(安静地)检测NaN
的方法。
ECMAScript(JavaScript)标准指定Numbers
是IEEE 754浮点数,其中包括NaN
作为可能的值。
ECMA 262 5e第4.3.19节:数值
原始值对应于双精度64位二进制格式IEEE 754值。
ECMA 262 5e第4.3.23节:NaN
数值是IEEE 754“非数字”值。
维基百科上的IEEE 754
IEEE标准浮点算法是电气和电子工程师协会制定的技术标准,也是浮点运算最广泛使用的标准[...]
标准定义
[...]
链接地址: http://www.djcxy.com/p/17271.html上一篇: Why does typeof NaN return 'number'?
下一篇: Variable hoisting