为什么isNaN()为字符串返回不一致的结果?

时间:2015-06-18 08:33:54

标签: javascript

请考虑以下示例。

在这种情况下,isNaN返回false

> isNaN('014e02768282049601000001')
< false

但是这里它返回true

> isNaN('014e0276861d077601000001')
< true

这两个带十六进制数字的字符串有什么区别?

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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

2e3

相同
2 * Math.pow(10,3);

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

答案 1 :(得分:1)

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

您可以在JavaScript和许多其他语言中声明指数形式:

var b = 3e-20;

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