Числа, начинающиеся с нуля, в JavaScript

207
09 ноября 2018, 14:30

Набираю в консоли Google Chrome следующий пример (и получаю интересный результат):

for (num = 050; num <= 100; num = num + 1) {
    console.log(num);
}

Печать почему-то начинается от 40. Если ввести вместо этого num = 50, то от 50. В чем разница этих значений для JavaScript, и почему цикл начинается с 40 в первом случае?

Answer 1

Числа, начинающиеся с нуля, считаются восьмеричными, если в них нет цифр больше 7. Ссылка на справку

Грамматику можно посмотреть в спецификации: 11.8.3 Numeric Literals

Answer 2

В JavaScript определяется целочисленный восьмиричный литерал следующим образом

OctalIntegerLiteral ::
       0o OctalDigits 
       0O OctalDigits
OctalDigits ::
       OctalDigit 
       OctalDigits OctalDigit
OctalDigit :: one of
       0 1 2 3 4 5 6 7

Как можно видеть, литералы, начинающиеся с цифры 0, за которой следует буква строчная o или заглавная O, являются целочисленными восьмиричными литералами.

Проблема в том, что, например, мне не удалось использовать этот литерал в IE 11 независимо от выбранного режима ("USE STRICT").:) В то время как в FireFox 42 данный литерал успешно обрабатывается.

Также в JavaScript определяется так называемый LegacyOctalIntegerLiteral

LegacyOctalIntegerLiteral ::
        0 OctalDigit 
        LegacyOctalIntegerLiteral OctalDigit

В вашем случае используется именно этот литерал.

В спецификации EcmaScript (6 редакция) есть замечание, что

A conforming implementation, when processing strict mode code (see 10.2.1), must not extend, as described in B.1.1, the syntax of NumericLiteral to include LegacyOctalIntegerLiteral, nor extend the syntax of DecimalIntegerLiteral to include NonOctalDecimalIntegerLiteral.

Однако, как обычно, каждый браузер идет своим путем.:)

READ ALSO
Ошибка document.getElementByName is not function

Ошибка document.getElementByName is not function

При работе с radiobutton возникла такая ошибка: documentgetElementByName is not function

209
условие на URL JS

условие на URL JS

Есть код, который должен проверить ссылкуЕсли ссылка и текущее положение совпадают , то блок показывается, иначе - нет

196
Как повесить на каждый элемент массива класс, через определенный интервал?

Как повесить на каждый элемент массива класс, через определенный интервал?

Объясните,пожалуйста, как можно повесить класс на каждый элемент массива через определенный интервал?

167
Какой тип возвращает функция в данном случае?

Какой тип возвращает функция в данном случае?

В данном случае непонятно что за тип возвращается в последней строке? Что это, массив с функциями ?

165