我有一段JavaScript代码,可以将整数值设置为变量。
有些东西坏了,所以当我尝试alert(A);
时,它会返回NaN
。 isNaN(A);
返回true。但是,如果我alert(typeof(A));
,则说number
。
那么变量怎么可以是一个数字而不是一个数字呢?也许我误解了NaN究竟是什么?
编辑:感谢答案,我看到我错了,因为:
NaN
的类型为Number
,NaN
的意思是“不是数字”,与“不是Number
类型”不一样,0/0
是NaN
的一个很好的例子:它仍然是一个数字,但JavaScript(没有其他人)可以说零的实际值除以零。另一方面,1/0
会返回Infinity
,而不是NaN
。答案 0 :(得分:20)
据我了解,NaN
是Number
类的一个标记实例,它代表了它所代表的数字结果 - 无法充分表示的数字结果。因此,0/0
不是一个数字,在某种意义上它是NaN
,但就其类型而言 是Number
。
也许它应该被称为NaRN(不是可表示的数字)。
答案 1 :(得分:14)
如果您有一个变量并将结果赋值为0/0,则该变量仍为数字类型,但该值未定义(不是数字)。还有其他条件可以发生这种情况,但这说明了你所看到的。
答案 2 :(得分:1)
您将对象的类型与值混淆。 NaN
是一个特定的值,可以为number
类型的对象赋值,例如在零除零的情况下或尝试从不表示的字符串转换数字时一个数字。
答案 3 :(得分:1)
W3Schools的一些定义:
无穷大:表示正/负无穷大的数值
POSITIVE_INFINITY属性表示无限,在溢出时返回。 NEGATIVE_INFINITY表示负无穷大(溢出时返回)。
NaN属性表示“非数字”值。此属性表示值不是合法数字。
isFinite()函数确定数字是否是有限的合法数字。 如果值为+ infinity,-infinity或NaN,则此函数返回false。
一些测试:
var n1 = 1/0;
var n2 = 0/0;
var n3 = (Number.MAX_VALUE)*2; //overflow
var b1 = Number.POSITIVE_INFINITY == n1;
var b2 = Number.POSITIVE_INFINITY == n2;
var b2n = Number.NEGATIVE_INFINITY == n2;
var b3 = Number.POSITIVE_INFINITY == n3;
var msg = "n1=" + n1 + ", n2=" + n2 + ", n3=" + n3;
msg += "<br/> n1 Is POSITIVE_INFINITY=" + b1;
msg += "<br/> n2 Is POSITIVE_INFINITY=" + b2;
msg += "<br/> n2 Is POSITIVE_INFINITY=" + b2n;
msg += "<br/> n3 Is POSITIVE_INFINITY=" + b3;
msg += "<br/> n1 IsFinite=" + isFinite(n1);
msg += "<br/> n2 IsFinite=" + isFinite(n2);
msg += "<br/> n3 IsFinite=" + isFinite(n3);
msg += "<br/> n1 + n1 =" + (n1 + n1) ;
msg += "<br/> n1 - n1 =" + (n1 - n1) ;
msg += "<br/> n2 + n1 =" + (n2 + n1) ;
document.write(msg);
显示
n1=Infinity, n2=NaN, n3=Infinity
n1 Is POSITIVE_INFINITY=true
n2 Is POSITIVE_INFINITY=false
n2 Is POSITIVE_INFINITY=false
n3 Is POSITIVE_INFINITY=true
n1 IsFinite=false
n2 IsFinite=false
n3 IsFinite=false
n1 + n1 =Infinity
n1 - n1 =NaN
n1 - n1 =NaN
答案 4 :(得分:0)
除了已经说过的话,我想如果你除以例如一个字符串。它试图返回NaN,但仍将其视为数字。
答案 5 :(得分:0)
你应该看看the Wikipedia article。它有更多细节。