这次,有朋友提出了一个问题,为什么parseInt("a",b)中a必须小于b,由于这个函数我不太常用,所以刚拿到这个问题我的第一反应是这应该是把a转化为b进制吧,怎么还有大小限制,如果这样,那么a必须小于b这个函数就没有存在的必要了,
经过知识了解。感觉js中进制转化是容易搞懂又容易再次混淆的问题。
parseInt("a",b)是将“a”字符串(如果第一个值不为字符串就先转变为字符串)转化为数字,然后将b进制的数字a转化为10进制数值并返回结果。
其他使用方法:
1.基本用法(只接受一个参数,可以当做第二个参数默认是10)
parseInt的返回值只有两种可能,不是一个十进制整数,就是NaN。
a.将字符串转为整数。parseInt('123') // 123
b.如果字符串头部有空格,空格会被自动去除。parseInt(' 81') // 81
c.如果parseInt的参数不是字符串,则会先转为字符串再转换。
d.字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。
e.如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。
f.如果字符串以0x或0X开头,parseInt会将其按照十六进制数解析。parseInt('0x10') // 16
g.如果字符串以0开头,将其按照10进制解析。parseInt('011') // 11
h.如果参数以0开头,但不是字符串,则会先将数值转成字符串,然后解析,见规则c parseInt(011) // 9
i.对于那些会自动转为科学计数法的数字,parseInt会将科学计数法的表示方法视为字符串,因此导致一些奇怪的结果。
parseInt(1000000000000000000000.5) // 1
// 等同于
parseInt('1e+21') // 1
parseInt(0.0000008) // 8
// 等同于
parseInt('8e-7') // 8
Number()这个函数其实是将括号中内容尝试转变为number类型数值的,与进制转化没有任何关系。
toString()才是进制转换,将数字转换为2到36之间的进制。
测试如下:
var a =parseInt(7,16); //7
var b =parseInt("17",8); //15
var c =Number("6"); //6
var x =(18).toString(36); //i
此外,看到有博主问这个:
上面parseInt()竟然其他使用用法d可以解决,第一题,1/0为Infinity,刚好19进制中的字符I为18,而n不认识,此时返回18.
值得注意的是
console.log(parseInt) ; // function parseInt(){}