暗藏杀机的parseInt函数

JavaScript里面有个parseInt函数,是用来把字符转成数字的,咱们一般这么用,返回值就是数字12了:

parseInt(“12ABC”) 

嗯,看上去很不错。再来看看下面两个会返回什么样的结果?

parseInt(“9”)

parseInt(“13”)

没错,他们分别返回了数字9和数字13。那么下面的两个呢?

parseInt(“09”)

parseInt(“013”)

看上去他们应该和前面两个一样返回数字9和13。但是结果并非如此:第一个返回了数字0,第二个返回了数字11。其实parseInt本来的语法是这样的:

parseInt(numString, [radix])

第一个参数是包含数字的字符串,第二个是转化时的进制。我们平时使用基本不带第二个参数,因为正常情况下按十进制转化,无须我们指定。但是0开头的字符串系统会认为是八进制数,09并不是合法的八进制数,所以返回了0;013从八进制转化成十进制正好是11。

我们要小心了,这种错误出现了一般很难察觉。所以,还是每次使用都带上第二个参数吧。