请考虑下面的例子。为什么isNaN()为字符串返回不一致的结果?
在这种情况下isNaN返回false
> isNaN('014e02768282049601000001')
< false
但这里返回true
> isNaN('014e0276861d077601000001')
< true
是什么这两个字符串与十六进制数之间的区别?
在JS中检测数字和非数字的可靠方法是什么?
谢谢!
请考虑下面的例子。为什么isNaN()为字符串返回不一致的结果?
在这种情况下isNaN返回false
> isNaN('014e02768282049601000001')
< false
但这里返回true
> isNaN('014e0276861d077601000001')
< true
是什么这两个字符串与十六进制数之间的区别?
在JS中检测数字和非数字的可靠方法是什么?
谢谢!
014e02768282049601000001
是以指数形式写的有效数字,如:5e2
(== 500 = 5 *10²)。第二个包含一个字母d
,它没有特别的含义,因此不是一个数字。
可以声明JavaScript和许多其他语言的指数形式字面上:
var b = 3e-20;
字符e
,-
,+
和.
属于定义的数字(当然时所使用的字符集,如果使用得当的话)。其他角色不会。
这两个字符串不会被解释为十六进制数字。十六进制数字必须以0x
开头。
但第一个有文字的有效数字的形式:
2e3
相同
2 * Math.pow(10,3);
第二个是无效的,因为它包含d
。
第一个字符串有效数字以指数形式,第二个无效 – Grundy
@Grundy,因为中间有'd'? – Paker
是的,如果你想让它解析到数 - 使用'parseInt'例如 – Grundy