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

Strange and inconsistent behaviour of parseInt on decimal fractions

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

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

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

注意:我一般用~~而不是parseInt,这样看起来比较安全

为什么我会得到这些结果?

如果参数还不是字符串,

parseInt 将其第一个参数字符串化。 0.000008 字符串化为 '0.000008',但 0.0000008 字符串化为 '8e-7'.

如果 parseInt 在输入中发现无效字符,它将忽略该字符及其后的所有内容。 .e 对基数 10 无效(并且 . 对任何基数都无效),因此 parseInt'0.000008' 视为 '0' 并且'8e-7' 作为 '8'.

我不知道你想在这里做什么,但 parseInt 不是执行此操作的工具。