Javascript 0 в начале номера
Я просто хочу понять логику JS с 0-с в начале числа. Например
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-кода и так много (вероятно, непреднамеренно) основано на 09.3
не являясь синтаксической ошибкой, ошибка была помечена как "WONTFIX".
Как указано в комментарии ниже, восьмеричные константы в "строгом" режиме полностью запрещены.
Ведущий ноль указывает восьмеричное (основание 8) число (в отличие от десятичного - основание 10 - число).
Ведущий 0x обозначает шестнадцатеричное число, а ведущий 0b - двоичное число.
Поэтому 09.3 по умолчанию принимает значение десятичное, потому что цифра "9" не существует в восьмеричной записи.
Изменить (кредит Эван Тримболи, ниже): 02.5 выдает исключение, потому что восьмеричные литералы должны быть целыми числами.
Уже поздно для этого ответа, но все еще обновление с моей стороны. По словам Пойнти, в строгом режиме восьмеричные константы не допускаются.
'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
}
Кроме того, это не имело никакого смысла, потому что ведущие нули - это те же значения без ведущих нулей. Но об этом нужно заботиться при получении значений с другой стороны.