【问题标题】:javascript does not accept 0 before any number [duplicate]javascript不接受任何数字前的0 [重复]
【发布时间】:2015-10-14 07:16:36
【问题描述】:
var value = 05000;
var addValue = 1;

如果我计算value + addvalue,那么它计算的值是错误的

 var result = value + addValue;// it's return value is 20481

从快速观看结果中查看下图

但是如果我将值赋予 5000(值前没有 0),那么它的计算是正确的。为什么?

【问题讨论】:

  • 05000 是八进制表示法。十进制值是 5 x 8^3 = 5 x 512 = 2560。如果您得到 20481,那么您将提供 050000(四个尾随零,而不是三个),即 5 x 8^4 = 5 x 4096 = 20480.
  • 顺便说一句,如果你在一个数字前加上0x 或0X,它会读作十六进制数字。所以0x10 === 16 和0x10 === 020 都会返回true,除非strict mode。

标签: javascript angularjs calculator


【解决方案1】:

将0 放在数字之前使其成为octal 数字文字。因此以 8 为基数对其进行解释。

因此 - 不要在数字前加上前导零。很明显doesn't do what you intend。

如果您在 strict mode 中运行代码,则会收到错误消息:

Uncaught SyntaxError: Octal literals are not allowed in strict mode.

【讨论】:

  • 但是如果我计算01+1 =2,为什么它会返回正确的值。
  • 八进制的 01 与十进制的 01 相同
  • @RameshRajendran - 因为 01 是 1 x 8^0 = 1 的八进制表示法。
  • @RameshRajendran 八进制文字是一种表示相同数字的不同方式,就像二进制表示或十六进制一样。 颜色代码是开发人员知道的一个很好的例子,有没有想过#EEFFAA是什么意思?它实际上是文字 0xEEFFAA,它是 base 16 中的 数字,它是可读的,因为每个 四位数字 表示某种含义(颜色强度不同的颜色——红色贪婪或蓝色)。八进制(以 8 为基数)用于编码 3 位而不是 4 位(如十六进制)。例如,它对 linux 中的权限很有用。
  • @GuiImamura 如果它让你感觉好些,我已经被封顶了,所以我从这个答案中获得了大约 15 个声誉。此外,声誉是毫无意义的,只是制作好的内容和美好的事情会发生 - stackoverflow.com/questions/14220321/… 获得 +300 比收集小答案要容易得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
相关资源
最近更新 更多