为什么JavaScript会将我的字符串识别为数字?
为什么JavaScript会将我的字符串识别为数字?
这其实是JavaScript数值解析规则里的一个特性——以0x开头的字符串会被自动识别为十六进制数字,所以才会出现你测试的两种情况都返回true的结果。
你测试的第一段代码:
!isNaN("0x8d0adfd44b4351e5651c09566403e7edc586243dc0890f8e86c043a924a9592c")
还有第二段代码:
!isNaN(parseFloat("0x8d0adfd44b4351e5651c09566403e7edc586243dc0890f8e86c043a924a9592c"))
它们都会返回true,核心原因就是0x这个前缀触发了JavaScript的十六进制解析逻辑。不管后面跟着的是多长的合法十六进制字符(0-9、a-f、A-F),解析器都会尝试把整个字符串转换成对应的十进制数值,自然就不会被判定为NaN了。
如果你的需求是只把纯十进制格式的字符串识别为数字,可以先做个前缀检查,或者用更严格的验证方式,比如结合正则表达式来匹配纯十进制数字格式,再进行数值转换判断。
备注:内容来源于stack exchange,提问作者Alex Libengood
相关产品推荐
相关产品推荐

