数字开头的Javascript 0

时间:2016-01-27 21:05:58

标签: javascript numbers leading-zero

我只想在数字的开头用0-s理解js逻辑。 例如

var x = 09.3
// here x == 9.3
// other example
09.3 == 9.3
// returns true

// but check this one
var x = 02.5
// Uncaught SyntaxError: Unexpected number
// or this one
02.5 == 2.5 
// same error here

任何人都可以解释,它是如何工作的,为什么在第一个例子中它起作用,并忽略前导零,但在第二个例子中它给了我一个SyntaxError

谢谢

3 个答案:

答案 0 :(得分:23)

数字文字上的前导0表示八进制整数是意图,除非 第二个数字是8或{{1 }}。在这种情况下,将忽略前导9

因为八进制数字文字必须是整数,0是错误的。

此行为在2014年被记录为Firefox中的一个错误,但由于世界上有如此多的JavaScript代码,而且很多(可能是无意中)依赖02.5不是语法错误,错误是标有“WONTFIX”。

正如下面的评论中指出的那样,在“严格”模式下,完全不允许八进制常量。

答案 1 :(得分:5)

前导零表示八进制(基数为8)的数字(而不是十进制 - 基数为10的数字)。

前导0x表示十六进制数,前导0b表示二进制数。

因此09.3默认为十进制,因为数字' 9'不以八进制表示法存在。

编辑(信用Evan Trimboli,下文):02.5抛出异常,因为八进制文字必须是整数。

答案 2 :(得分:0)

这个答案已经很晚了,但仍然是我身边的更新。正如Pointy在严格模式中所说的,不允许八进制常量。

'use strict'
if(022 == 22){
  console.log("True");
}
console.log("Failed")

抛出异常

{
  "message": "Uncaught SyntaxError: Octal literals are not allowed in strict mode.",
  "filename": "https://stacksnippets.net/js",
  "lineno": 14,
  "colno": 4
}

即使我们将第二个数字添加为890仍然不允许strict mode

'use strict'
if(029 == 29){
  console.log("True");
}
console.log("Failed")

它也会引发异常

{
  "message": "Uncaught SyntaxError: Decimals with leading zeros are not allowed in strict mode.",
  "filename": "https://stacksnippets.net/js",
  "lineno": 14,
  "colno": 4
}

它也没有任何意义,因为前导零是没有前导零的相同值。但是从另一方接收价值时需要注意。