当数字前导为零时,Javascript输出会有所不同



为什么javascript是创建混乱与以下代码?

var a = 10; //will return output 10
var b = 010; //will return output 8

010是十进制值8的八进制表示。

如果你不了解数字系统,基本上有4种方法可以在编程中表示数字

  • 二进制(以2为基数)
  • 八进制(以8为基数)
  • 十进制(以10为基数)
  • 十六进制(基数16)

阅读更多关于数字系统的信息

如果你想在JavaScript中表示一个八进制数,你可以在任何值前面加0,如果你想在十六进制中表示一个值,可以在任何数字前面加0x。

例如

var a= 010;    //8 in decimal
var b= 0xF;     //15 in decimal

在这里了解更多关于JavaScript中的数字

从最早的C版本(1978)开始,前导零已用于表示八进制文字

这也适用于c++, Java,甚至Javascript。

一些更大胆的语言(例如Python 3)正在向0o转移八进制文字,因为这些天前导0符号似乎弊大于利。

如果number以0开头,Javascript会将其解释为八进制数。不要写前导为零的数字(比如07)。有些JavaScript版本将以前导零开头的数字解释为八进制。

问题是您正在使用松散模式,并且在大多数环境中,在松散模式下,前导0后跟一个数字表示遗留的八进制文字。在八进制中,010(也就是说,八进制10)是数字8。八进制是以8为基数的,所以最右边的一列是"个位",最左边的一列是"八",最左边的一列是"六十四"(8 × 8),等等(就像十进制一样,最右边的一列是"个位",再左边的一列是"十位",再左边的一列是"百位",等等)

<>之前八进制小数------ -------0 01…7日710 811日912日1013日1114日1215日1316日1417日1520日16…之前

修复:

  1. 使用严格模式("use strict";在顶部,和/或使用默认严格的模块),

  2. 不要以0作为十进制文字的开头。: -)

最新更新