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
}

Кроме того, это не имело никакого смысла, потому что ведущие нули - это те же значения без ведущих нулей. Но об этом нужно заботиться при получении значений с другой стороны.

Другие вопросы по тегам