Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么typeof NaN返回';编号';?_Javascript_Nan - Fatal编程技术网

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