ChenPt / dailyNote

dailyNode for myself
https://github.com/ChenPt/dailyNote/issues
0 stars 0 forks source link

2018/08/09 关于parseInt #24

Open ChenPt opened 5 years ago

ChenPt commented 5 years ago

思考题

parseInt('0.0000009') // ???
parseInt(0.0000009)  // ???

上面两道题的结果? 0 0 ?

parseInt

关于parseInt,就是用于将字符类型的数据转化成数字类型。如果传的参数不是字符串,则会先自动调用toString方法将参数转化为字符串。

parseInt从传进来的参数的左边的第一个字符开始进行转换,遇到了非数字的字符就会停止转换。

parseInt接收两个参数

parseInt(string, radix)
parseInt('10101', 2) // 21

第二个参数是该string使用的进制,默认string的进制为10进制,最终转换的结果以10进制表示

第一题

parseInt('0.0000009') // ???

结果为0,因为parseInt遇到了.字符之后就停止了转换,所以结果为0

第二题

parseInt(0.00000009) // ???

结果为9,我一开始也不知道为什么,因为一开始我也忘记了parseInt会将不是string类型的参数隐式转换为字符类型,而0.0000009的表示其实是以科学计数法表示的9e-7,这时候转换为字符串就是'9e-7',实际上也就是parseInt('9e-7'),遇到e之后停止转换。输出9,所以结果为9。

科学计数法

JS会将小数位数超过6位的小数以科学计数法表示

var a = 0.000009 // 6位小数
a.toString() === '0.000009' // true

var b = 0.0000009 // 7位小数 实际上表示为 9e-7
b.toString() === '0.0000009' // false