为什么JavaScript输出16384而不是040000?

Pro*_*ogo 3 javascript numbers

我的JavaScript程序遇到了一个非常奇怪的问题.我发现用JavaScript的出于某种原因改变04000016384![ 示例 ]有谁知道为什么JavaScript会这样做?

Edg*_*ado 7

这是因为在js中,前面加上的数字文字0被认为是八进制(基数为8)

例如

010 == 8
Run Code Online (Sandbox Code Playgroud)

在你的例子040000中,实际上4*8*8*8*8 = 16384是因为在八进制0中,右边的每个值乘以8.

编辑:奖金:

如果前导0在字符串表示中(例如,如果它是由用户引入的),并且您希望避免转换为八进制,请在方法调用中指定带有值的基数(也称为基数),如下所示10parseInt

var number = parseInt("040000", 10);  //number will be 40000 ;)
Run Code Online (Sandbox Code Playgroud)

在最近的浏览器中,基数默认为10,但在旧浏览器中不是,因此如果您还想要最大兼容性,请始终指定基数参数(通常为10).

干杯