数字开头的Javascript 0

Gor*_*Gor 14 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
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Poi*_*nty 24

龙头0上的数值字面指示一个八进制整数是意图,除非所述第二位数是89.在这种情况下,前导0被忽略.

因为八进制数字文字必须是整数,所以02.5是错误的.

此行为在2014年被记录为Firefox中的一个错误,但由于世界上有如此多的JavaScript代码,并且其中很多(可能是无意中)依赖于09.3不是语法错误,因此该错误被标记为"WONTFIX".

正如下面的评论所指出的那样,在"严格"模式下,完全不允许八进制常量.

  • 不仅仅是第二个数字 - 如果任何数字是8或9,则忽略前导0. (3认同)

and*_*ies 5

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

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

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

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