我今天提了个问题:https://segmentfault.com/q/10...segmentfault
提完以后才发现是本身蠢了,理解不到位。函数
第一个参数必须,是要转换为整数的字符串,若是第一个参数不是字符串,会调用toString()
先转化为字符串。如parseInt(070)
等价于parseInt(070.toString())
等价于parseInt("56")
.code
第二个参数可选,是你告诉这个函数,你的输入实际上是几进制的,让它把这个输入转化为十进制的值。若是不写,默认为10.好比parseInt("56", 8)
,你告诉函数这个"56"是八进制的,让它输出十进制的数值,因而:5*8+6=46。
我理解不到位的地方,就是我觉得第二个参数是告诉函数,输出应该是几进制的,我觉得parseInt("56", 8)
是会输出一个八进制的数,这是不对的。字符串
一句话:字符串从左到右挨个遍历,每一个字符必须是这个进制内的有效字符(第一位能够是负号"-"),若是不是,就中止,而后转化全部有效的字符。若是开头第一个就不是有效字符,直接返回NaN。get
好像很难懂?看例子就容易明白了:string
parseInt("1234blue");// 1234 parseInt("1234blue", 16);// 74571 parseInt("b123");// NaN
第一个parseInt,没有指定radix,默认为10,因而十进制的有效字符是:0123456789,因此它遍历到"b"就中止了,输出1234.遍历
第二个parseInt,指定radix为16,十六进制的有效字符是:0123456789abcdef,因此它遍历到"l"才中止,截取的字符串是1234b,转化为十进制是74571.di
另外,对于parseInt()
来讲,小数点不是有效字符:parseInt("22.5")// 22
co