2015-06-18 108 views
4

请考虑下面的例子。为什么isNaN()为字符串返回不一致的结果?

在这种情况下isNaN返回false

> isNaN('014e02768282049601000001') 
< false 

但这里返回true

> isNaN('014e0276861d077601000001') 
< true 

是什么这两个字符串与十六进制数之间的区别?

在JS中检测数字和非数字的可靠方法是什么?

谢谢!

+9

第一个字符串有效数字以指数形式,第二个无效 – Grundy

+0

@Grundy,因为中间有'd'? – Paker

+0

是的,如果你想让它解析到数 - 使用'parseInt'例如 – Grundy

回答

1

014e02768282049601000001是以指数形式写的有效数字,如:5e2(== 500 = 5 *10²)。第二个包含一个字母d,它没有特别的含义,因此不是一个数字。

可以声明JavaScript和许多其他语言的指数形式字面上:

var b = 3e-20;

字符e-+.属于定义的数字(当然时所使用的字符集,如果使用得当的话)。其他角色不会。

2

这两个字符串不会被解释为十六进制数字。十六进制数字必须以0x开头。

但第一个有文字的有效数字的形式:

2e3 

相同

2 * Math.pow(10,3); 

第二个是无效的,因为它包含d

相关问题