Javascript 为什么typeof NaN返回';编号';?
只是出于好奇 似乎不太符合逻辑的是,Javascript 为什么typeof NaN返回';编号';?,javascript,nan,Javascript,Nan,只是出于好奇 似乎不太符合逻辑的是,typeof NaN是数字。顺便说一下,就像NaN===NaN或NaN==NaN返回false一样。这是javascript的特性之一,还是有原因 编辑:谢谢你的回答。不过,要想让一个人四处走动可不是件容易的事。在阅读答案和维基时,我理解得更多,但仍然是这样一句话 与NaN进行比较时,即使与自身进行比较,也始终会返回无序结果。比较谓词为信令或非信令,信令版本表示此类比较的无效异常。相等和不相等谓词是非信令的,因此可以使用返回false的x=x来测试x是否是安静
typeof NaN
是数字。顺便说一下,就像NaN===NaN
或NaN==NaN
返回false一样。这是javascript的特性之一,还是有原因
编辑:谢谢你的回答。不过,要想让一个人四处走动可不是件容易的事。在阅读答案和维基时,我理解得更多,但仍然是这样一句话
与NaN进行比较时,即使与自身进行比较,也始终会返回无序结果。比较谓词为信令或非信令,信令版本表示此类比较的无效异常。相等和不相等谓词是非信令的,因此可以使用返回false的x=x来测试x是否是安静的NaN
只是让我头晕目眩。如果有人能用人类(比如说数学家)可读的语言来翻译,我将不胜感激。
NaN!=NaN
,因为它们不需要相同的非数字。因此这很有意义。。。
还有为什么浮动的+0.00和-0.00不相同。舍入可能会导致它们实际上不是零
至于类型,这取决于语言。大多数语言会说NaN是一个浮点数、双精度数或数字,这取决于他们如何对它进行分类。。。我不知道有哪种语言会说这是未知类型或null。嗯,可能有点奇怪,称为“不是数字”的东西被认为是数字,但是
NaN
仍然是数字类型,尽管事实如此:-)
NaN
仅仅意味着特定值不能在数字类型的限制范围内表示(虽然这可以说是所有必须四舍五入以适合的数字,但是NaN
是一种特殊情况)
特定的NaN
不被视为等同于另一个NaN
,因为它们可能是不同的值。但是,NaN
仍然是数字类型,就像2718或31415一样
至于你最新的问题,请用外行的话解释: 与NaN进行比较时,即使与自身进行比较,也始终会返回无序结果。比较谓词为信令或非信令,信令版本表示此类比较的无效异常。相等和不相等谓词是非信令的,因此可以使用返回false的x=x来测试x是否是安静的NaN 所有这一切意味着(分解为几个部分): 与NaN进行比较时,即使与自身进行比较,也始终会返回无序结果 基本上,一个
NaN
不等于任何其他数字,包括另一个NaN
,甚至包括它本身
比较谓词为信令或非信令,信令版本表示此类比较的无效异常
尝试在NaN
和另一个数字之间进行比较(小于、大于等)操作可能会导致抛出异常(信令)或结果为false(非信令或静默)
相等和不相等谓词是非信令的,因此可以使用返回false的x=x来测试x是否是安静的NaN
相等性测试(等于,不等于)从不发出信号,因此使用它们不会导致异常。如果您有一个常规数字
x
,那么x==x
将始终为真。如果x
是NaN
,则x==x
将始终为false。它为您提供了一种轻松(安静)检测NaN
的方法。这只是因为NaN
是JS中Number对象的一个属性,它与它是一个数字无关。它的意思是不是一个数字。这不是javascript的特性,而是常见的计算机科学原理
发件人:
有三种操作
返回哪一个:
以NaN作为至少一个操作数的操作
不确定形式
- 0/0分区,∞/∞, ∞/−∞, −∞/∞, 及−∞/−∞ 李>
- 乘法0×0∞ 和0×−∞ 李>
- 权力1^∞ 李>
- 补充∞ + (−∞), (−∞) + ∞ 和等价减法
- 负数的平方根
- 负数的对数
- 90度(或π/2弧度)的奇数倍的切线
- 小于的数字的反正弦或余弦−1或 大于+1
所有这些值可能不相同。NaN的简单测试是测试
value==value
为false。NaN是有效的浮点值()
NaN===NaN是错误的,因为它们不一定是同一个非数字思考NaN的最佳方式是它不是一个已知的数字。这就是为什么NaN!=NaN,因为每个NaN值代表一些唯一的未知数字。NaN是必要的,因为浮点数的值范围有限。在某些情况下,舍入ng发生在低位丢失的地方,这会导致看似无意义的结果,如1.0/11*11!=1.0。真正大的值更大的是NaN,无穷大就是一个完美的例子
由于我们只有十个手指,任何试图显示大于10的值的尝试都是不可能的,这意味着这些值必须是NaN,因为我们已经丢失了这个大于10的值的真实值。浮点值也是如此,其中的值超过了浮点数所能容纳的限制。Javascript只有一个数字数据类型,这是标准的64位双精度浮点。所有内容都是双精度的。NaN是双精度的特殊值,但它仍然是双精度的
parseInt
所做的只是将字符串“转换”为数字数据类型,因此
console.log($.isNumeric(NaN)); // returns false
console.log($.type(NaN)); // returns number
Number("string"); // returns NaN