当数字具有前导零时,Javascript输出不同

时间:2016-09-28 14:34:51

标签: javascript

为什么javascript与以下代码混淆?

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

4 个答案:

答案 0 :(得分:2)

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

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

  • Binary(Base 2)
  • Octal(Base 8)
  • 十进制(基数为10)
  • 十六进制(Base 16)

详细了解数字系统here

如果你想在JavaScript中表示一个八进制数,你可以在任何值上加0,如果你想用十六进制表示一个值,可以通过将0x放在任何数字的前面来实现。

例如,

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

详细了解JavaScript here

中的数字

答案 1 :(得分:1)

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

这已经延续到了C ++,Java,甚至是Javascript。

一些更勇敢的语言(例如Python 3)正在向0o转换为八进制文字,因为现在领先的0表示法弊大于利。

答案 2 :(得分:0)

如果数字以0结尾,则Javascript将解释为八进制数。 永远不要写一个前导零的数字(如07)。 一些JavaScript版本将数字解释为八进制,如果它们用前导零写入。

答案 3 :(得分:0)

问题是,您使用的是宽松模式,在大多数环境中,在宽松模式下,前导0后跟数字表示旧八进制文字。在八进制中,010(即“ 10八进制”)是数字8。八进制是8的底数,因此最右边的数字是“ ones”列,其最左边的数字是“ eights”列,其最左边的数字是“ 64”(8 x 8)列,依此类推(就像十进制一样,最右边的列是“ 1”,左边的下一个是“十”,左边的下一个是“百”,依此类推)

Octal  Decimal
------ -------
    0        0
    1        1
...
    7        7
   10        8
   11        9
   12       10
   13       11
   14       12
   15       13
   16       14
   17       15
   20       16
...

要修复它:

  1. 使用strict mode(顶部为"use strict";和/或使用默认情况下严格的模块),并且

  2. 请勿使用0开始十进制文字。 :-)