Javascript 0 в начале числа
Я просто хочу понять логику js с 0-s в начале числа. Например
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
на числовом литерале указывает, что восьмеричное целое число является намерением,если на второй цифра 8
или 9
. В таком случае ведущий 0
игнорируется.
потому что восьмеричные числовые литералы должны быть целыми, 02.5
является ошибочным.
это поведение было зарегистрировано как ошибка в Firefox в 2014 году, но потому, что в мире так много кода JavaScript, и так много его (вероятно, непреднамеренно) полагается on 09.3
не будучи синтаксической ошибкой, ошибка была отмечена как "WONTFIX".
как отметил в комментарии ниже, в "строгом" режиме восьмеричные константы полностью запрещены.
начальный ноль указывает восьмеричное число (основание 8) (в отличие от десятичного числа 10).
ведущий 0x указывает шестнадцатеричное число, а ведущий 0b-двоичное число.
поэтому 09.3 по умолчанию имеет значение decimal, потому что цифра " 9 " не существует в восьмеричной нотации.
Edit (credit Evan Trimboli, ниже): 02.5 выдает исключение, потому что восьмеричные литералы должны быть целыми числами.
уже поздно для ответа, но все-таки обновление с моей стороны. По словам 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
ведущий 0
не допускается 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
}
также это не имело никакого смысла, потому что ведущие нули-это те же значения без ведущих ноли. Но нужно быть внимательным при получении ценностей с другой стороны.