好吧,似乎有点奇怪,所谓的“不是数字”被认为是一个数字,但仍然是一个数字类型,尽管这是事实:-)NaN
NaN只是意味着特定值不能在数值类型的限制内表示(尽管对于所有必须四舍五入以适合的数字都可以这样说,但这是一种特殊情况)。NaN
一个特定值不被视为等于另一个特定值,因为它们可能是不同的值。但是,仍然是一种数字类型,就像 2718 或 31415 一样。NaNNaNNaN
至于你更新的问题,用外行人的话来解释:
与 NaN 的比较始终返回无序结果,即使与自身进行比较也是如此。比较谓词要么是信令,要么是非信令,信令版本表示此类比较的无效例外。相等和不相等谓词是非信号性的,因此 x = x 返回 false 可用于测试 x 是否为安静的 NaN。
所有这些意味着(分解为几个部分):
与 NaN 的比较始终返回无序结果,即使与自身进行比较也是如此。
基本上,a 不等于任何其他数字,包括另一个,甚至包括它本身。NaNNaN
比较谓词要么是信令,要么是非信令,信令版本表示此类比较的无效例外。
尝试在一个数字和另一个数字之间执行比较(小于、大于等)操作可能会导致抛出异常(信令),或者只是得到假结果(非信令或安静)。NaN
相等和不相等谓词是非信号性的,因此 x = x 返回 false 可用于测试 x 是否为安静的 NaN。
相等性(等于,不等于)的测试永远不会发出信号,因此使用它们不会导致异常。如果你有一个常规数字,那么将永远是真的。如果 是 ,则始终为假。它为您提供了一种轻松(安静)检测的方法。xx == xxNaNx == xNaN