奇怪的 parseInt(0.0000005)
上面的题目您一定不陌生,原因是 parseInt 还接受第二个参数:
即是 parseInt(numericalString, radix),而第二个参数是第一个参数所在的基数。
当然,如果第二个值为 falsy(false, 0 ,”, null, undefined) 值的话,则默认为 10。 所以:
这是细节上的考量,我们今天要解的问题是:
原因为:
由于 0.0000005 === 5e-7, 所以内部将其转换为
如果第一个参数不是字符串,内部则将其转换为字符串,然后进行解析,并返回解析后的整数。然后就会变成
最终 parseInt 会忽略 e - 7,变为 5。
同样 999999999999999999999 === 1e+21 , 所以 parseInt(999999999999999999999) === 1。
如果当前数字类型为 bigInt,则不会发生该情况。parseInt(999999999999999999990n) === 1e+21。为什么呢?