在判断一个变量是否是数字或者是一个纯数字时候碰到的一个问题,
刚开始我用的parseInt方法,结果碰到了这种情况
let num = parseInt('1234abcd');
num //1234
let num2 = parseInt('a1234');
num2 //NaN
后面我用的 + 运算符来转换,感觉良好。(正则也不错
let num = +'1234abcd'
num //NaN
let num2 = +'a1234'
num2 //NaN
比较好奇多,parseInt居然把数字后的非字符省略了,这是什么鬼?
parseInt()
在判断字符串是否是数字值前,parseInt() 和 parseFloat() 都会仔细分析该字符串。
parseInt() 方法首先查看位置 0 处的字符,判断它是否是个有效数字;如果不是,该方法将返回 NaN,不再继续执行其他操作。但如果该字符是有效数字,该方法将查看位置 1 处的字符,进行同样的测试。这一过程将持续到发现非有效数字的字符为止,此时 parseInt() 将把该字符之前的字符串转换成数字。
例如,如果要把字符串 "12345red" 转换成整数,那么 parseInt() 将返回 12345,因为当它检查到字符 r 时,就会停止检测过程。
字符串中包含的数字字面量会被正确转换为数字,比如 "0xA" 会被正确转换为数字 10。不过,字符串 "22.5" 将被转换成 22,因为对于整数来说,小数点是无效字符。