javascript的parseInt转数字的问题?

在判断一个变量是否是数字或者是一个纯数字时候碰到的一个问题,
刚开始我用的parseInt方法,结果碰到了这种情况

let num = parseInt('1234abcd');
num //1234
let num2 = parseInt('a1234');
num2 //NaN

后面我用的 + 运算符来转换,感觉良好。(正则也不错

let num = +'1234abcd'
num //NaN
let num2 = +'a1234'
num2 //NaN

比较好奇多,parseInt居然把数字后的非字符省略了,这是什么鬼?

阅读 6.1k
4 个回答

parseInt()
在判断字符串是否是数字值前,parseInt() 和 parseFloat() 都会仔细分析该字符串。
parseInt() 方法首先查看位置 0 处的字符,判断它是否是个有效数字;如果不是,该方法将返回 NaN,不再继续执行其他操作。但如果该字符是有效数字,该方法将查看位置 1 处的字符,进行同样的测试。这一过程将持续到发现非有效数字的字符为止,此时 parseInt() 将把该字符之前的字符串转换成数字。
例如,如果要把字符串 "12345red" 转换成整数,那么 parseInt() 将返回 12345,因为当它检查到字符 r 时,就会停止检测过程。
字符串中包含的数字字面量会被正确转换为数字,比如 "0xA" 会被正确转换为数字 10。不过,字符串 "22.5" 将被转换成 22,因为对于整数来说,小数点是无效字符。

parseInt 函数就是把字符串转成数字,因此非数字部分不会解析而是忽略。比如你写一个对象,让对象的 toString 方法返回一个数字或者数字字符串看看。

题主可对比 Number(作为函数用而不是构造器),将传入的值转为一个数字。你又可以写一个对象,让其 valueOf 或者 toString 方法返回一个数字字符串布尔值等基本数据类型之类看看。

进行数学运算的时候,和 Number 情况是一样的,会先转换成数字。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题