Набираю в консоли Google Chrome следующий пример (и получаю интересный результат):
for (num = 050; num <= 100; num = num + 1) {
console.log(num);
}
Печать почему-то начинается от 40. Если ввести вместо этого num = 50
, то от 50. В чем разница этих значений для JavaScript, и почему цикл начинается с 40 в первом случае?
Числа, начинающиеся с нуля, считаются восьмеричными, если в них нет цифр больше 7. Ссылка на справку
Грамматику можно посмотреть в спецификации: 11.8.3 Numeric Literals
В 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.
Однако, как обычно, каждый браузер идет своим путем.:)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При работе с radiobutton возникла такая ошибка: documentgetElementByName is not function
Есть код, который должен проверить ссылкуЕсли ссылка и текущее положение совпадают , то блок показывается, иначе - нет
Объясните,пожалуйста, как можно повесить класс на каждый элемент массива через определенный интервал?
В данном случае непонятно что за тип возвращается в последней строке? Что это, массив с функциями ?