只是出于好奇。
这似乎不太符合逻辑typeof NaN
是数字。就像NaN === NaN
or NaN == NaN
顺便说一句,返回 false。这是 JavaScript 的特性之一吗?或者有什么原因吗?
编辑:感谢您的回答。然而,要让人们头脑清醒并不是一件容易的事。阅读答案和维基我了解更多,但仍然是这样的一句话
与一个比较NaN
即使与自身进行比较,也始终返回无序结果。比较谓词要么是信令的,要么是非信令的,信令版本表示此类比较的无效异常。等式和不等式谓词是非信号的,所以x = x
返回 false 可用于测试 x 是否是安静的NaN
.
只是让我头晕目眩。如果有人可以将其翻译成人类(而不是数学家)可读的语言,我将不胜感激。
[附录 2023/06] 我创建了一个小模块来检查 ES 中任何内容的类型。可能有帮助,检查一下@GitHub
好吧,“不是数字”的东西被认为是数字,这可能看起来有点奇怪,但是NaN
仍然是一个数字type,尽管如此:-)
NaN
只是意味着特定值无法在数字类型的限制内表示(尽管可以说所有数字都必须四舍五入才能适合,但是NaN
是一种特殊情况)。
具体的NaN
不被认为等于另一个NaN
因为它们可能是不同的值。然而,NaN
仍然是数字类型,就像 2718 或 31415 一样。
至于您更新的问题,用外行人的话解释一下:
即使与 NaN 本身进行比较,与 NaN 的比较也始终返回无序结果。比较谓词要么是信令的,要么是非信令的,信令版本表示此类比较的无效异常。等式和不等式谓词是无信号的,因此返回 false 的 x = x 可用于测试 x 是否是安静的 NaN。
所有这些意味着(分成几部分):
即使与 NaN 本身进行比较,与 NaN 的比较也始终返回无序结果。
基本上,一个NaN
不等于任何其他数字,包括另一个数字NaN
,甚至包括itself.
比较谓词要么是信令的,要么是非信令的,信令版本表示此类比较的无效异常。
尝试在 a 之间进行比较(小于、大于等)操作NaN
另一个数字可能导致抛出异常(信号)或只是得到错误结果(非信号或安静)。
等式和不等式谓词是无信号的,因此返回 false 的 x = x 可用于测试 x 是否是安静的 NaN。
相等性测试(等于、不等于)永远不会发出信号,因此使用它们不会导致异常。如果您有常规号码x
, then x == x
永远是真的。如果x
is a NaN
, then x == x
永远是假的。它为您提供了一种检测方法NaN
轻松地(安静地)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)