parseInt对小数部分的奇怪和不一致行为

lns*_*shi 12 javascript v8

console.log(parseInt(0.0000008))
// > 8

console.log(parseInt(0.000008))
// > 0

console.log(parseInt(0.0000008, 10))
// > 8

console.log(parseInt(0.000008, 10))
// > 0
Run Code Online (Sandbox Code Playgroud)

以上代码在macOS Sierra版本10.12.6上的Google Chrome版本62.0.3202.94(官方版本)(64位)运行.

如您所见,该行为不取决于您是否指定基数.

注意:我通常使用~~而不是使用parseInt,它看起来更安全.

为什么我得到这些结果?

use*_*ica 20

parseInt如果参数不是字符串,则将其第一个参数字符串化.0.000008字符串化'0.000008',但0.0000008字符串化'8e-7'.

如果parseInt在输入中找到无效字符,它将忽略该字符及其后的所有内容..e对于基座10无效(和.将是任何碱无效),所以parseInt认为'0.000008'作为'0''8e-7'作为'8'.

我不知道你在这里想做什么,但parseInt不是这样做的工具.