Javascript 数字开头为 0
Javascript 0 in beginning of number
我只是想了解数字开头为0的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
谢谢
前导零表示八进制(基数 8)数字(与十进制 - 基数 10 - 数字相反)。
前导0x表示十六进制数,前导0b表示二进制数。
因此 09.3 默认为十进制,因为八进制表示法中不存在数字“9”。
编辑(信用 Evan Trimboli,如下):02.5 抛出异常,因为八进制文字必须是整数。
前导 0
在数字文字上表示八进制整数是意图,除非 第二个 数字是 8
或 9
。在这种情况下,前导 0
将被忽略。
因为八进制数字文字必须是整数,所以 02.5
是错误的。
此行为在 2014 年被记录为 Firefox 中的一个错误,但因为世界上有如此多的 JavaScript 代码,而且其中有如此多的代码(可能是无意中)依赖于 09.3
不是语法错误,错误被标记为 "WONTFIX".
正如下面的评论所指出的,在 "strict" 模式下,八进制常量是完全不允许的。
这个答案来晚了,但仍然是我这边的更新。正如 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
}
即使我们将第二个数字添加为 8
或 9
仍然不允许在 strict mode
中使用前导 0
'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
}
它也没有任何意义,因为前导零是没有前导零的相同值。但是从对方接收值时需要注意。
我只是想了解数字开头为0的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
谢谢
前导零表示八进制(基数 8)数字(与十进制 - 基数 10 - 数字相反)。
前导0x表示十六进制数,前导0b表示二进制数。
因此 09.3 默认为十进制,因为八进制表示法中不存在数字“9”。
编辑(信用 Evan Trimboli,如下):02.5 抛出异常,因为八进制文字必须是整数。
前导 0
在数字文字上表示八进制整数是意图,除非 第二个 数字是 8
或 9
。在这种情况下,前导 0
将被忽略。
因为八进制数字文字必须是整数,所以 02.5
是错误的。
此行为在 2014 年被记录为 Firefox 中的一个错误,但因为世界上有如此多的 JavaScript 代码,而且其中有如此多的代码(可能是无意中)依赖于 09.3
不是语法错误,错误被标记为 "WONTFIX".
正如下面的评论所指出的,在 "strict" 模式下,八进制常量是完全不允许的。
这个答案来晚了,但仍然是我这边的更新。正如 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
}
即使我们将第二个数字添加为 8
或 9
仍然不允许在 strict mode
0
'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
}
它也没有任何意义,因为前导零是没有前导零的相同值。但是从对方接收值时需要注意。