关于parseInt()里的一些小坑

parseInt会自动忽略数字前面的空格,直到碰到不是数字时停止

parseInt(string,radix)方法是将输入字符串转化为数值,两个输入参数中string为要转化的字符串,radix可省略,是浏览器以几进制来解读输入的string。

举几个例子就能够对该方法有基本的了解了,如下:

parseInt("123"); //123

parseInt("123ab123"); //输出123  因为出现字母所以该字母及之后的字符都不被解析

若输入字符串首位是0或者0x之外的数字,则在radix缺省的情况下,默认解读为10进制。

0X默认解读为16进制

parseInt("0x10"); //字符串以0x开头则将之后的数字按16进制解读,16进制的10也就是十进制的16, 因此输出为16

parseInt("0xa"); //10,要注意16进制包括0~9,a~f (也就是10~15),超出该范围的字符不被解读。

parseInt("0xg"); //NAN

这三个例子分别等价于 parseInt("0x10",16)  parseInt("0xa",16)  parseInt("0xg",16)

以0开头的默认解读为八进制,但是不同浏览器解读方式不同,

parseInt("011"); //chrome下输出为11也就是会忽略首位的0,将010当成10进制解读,别的浏览器未测试--

parseInt("011",8); //此时会输出正确的9

因为这个坑,所以建议需要以八进制解读时,带上第二参数radix并设置为8,以免出问题

parseInt("09",8); //八进制取值范围为0~7,不包括9,因此9不能被解读,这时相当于parseInt("0",8);输出0

最后有一个特殊情况:

parseInt("0.000000434"); //4

parseInt("0.00000434"); //0

造成这种情况的原因可能是因为:

document.write(0.000000434+"<br/>"); //4.34e-7
document.write(0.00000434+"<br/>");//0.00000434

当小数点后有6个或者以上的0时,会以科学记数法存储,所以--。

猜你喜欢

转载自blog.csdn.net/qq_39579242/article/details/81480654