为什么typeof NaN返回'数字'?

只是出于好奇。

typeof NaN是数字似乎并不合逻辑。 就像NaN === NaNNaN == NaN顺便返回false。 这是javascript的特性之一,还是会有这个原因呢?

编辑:谢谢你的答案。 尽管让人头晕目眩并非易事。 阅读答案和维基我了解得更多,但仍然是一个像

与NaN进行比较时,即使与自身进行比较,也总会返回无序的结果。 比较谓词是信令或非信令,信令版本表示这种比较的无效例外。 等式和不等式谓词是非信号的,所以x = x返回false可用于测试x是否是安静的NaN。

只是让我的头转动。 如果有人可以在人类(而不是数学家)可读的语言中翻译这个,我会很乐意。


它意味着不是一个数字。 这不是javascript的特性,而是常用的计算机科学原理。

来自http://en.wikipedia.org/wiki/NaN:

有三种返回NaN的操作:

将NaN作为至少一个操作数进行操作

不确定的形式

  • 划分0/0,∞/∞,∞/-∞,-∞/∞和-∞/-∞
  • 乘法运算0×∞和0×∞
  • 功率1 ^∞
  • 加法∞+(-∞),(-∞)+∞和等价减法。
  • 真实的操作和复杂的结果:

  • 负数的平方根
  • 负数的对数
  • 90度(或π/ 2弧度)的奇数倍的正切值
  • 数字的反正弦或余弦小于-1或大于+1。
  • 所有这些值可能不一样。 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标准浮点算法是电气和电子工程师协会制定的技术标准,也是浮点运算最广泛使用的标准[...]

    标准定义

  • 算术格式:由有限数字(包括带符号的零和次正数),无穷大和特殊的“非数字”值(NaN)组成的二进制和十进制浮点数据集,
  • [...]

    链接地址: http://www.djcxy.com/p/17271.html

    上一篇: Why does typeof NaN return 'number'?

    下一篇: Variable hoisting