0

Игрался в консоли и заметил такую ситуацию: если задать значение переменной любым числом (1, 47, -24.1), то в переменную сохранится это число, но если ей присвоить число, вида 010, 015 и т.п., то в переменную сохраняется значение 8, 13. Что здесь происходит и как это называется?

введите сюда описание изображения

DocMok
  • 27
  • Потому что это взято как воcьмибитное число (8), так как эта цифра имеет 0 в начале. Таким образом, соответствующее десятичное значение равно 10 | 012: (2 * 8 ^ 0 + 1 * 8 ^ 1 = 10) – Netahaki Aug 18 '18 at 06:09
  • https://ru.stackoverflow.com/questions/480625/Числа-начинающиеся-с-нуля-в-javascript#480628 – Beast Winterwolf Aug 18 '18 at 06:11
  • 1
    @Netahaki не "восмибитное", а "восьмеричное" – Pavel Mayorov Aug 18 '18 at 06:52
  • Джаваскрипт мэджик ^.^ –  Aug 18 '18 at 09:11

1 Answers1

3

В ES5, чтобы представить восьмеричный литерал, вы используете нулевой префикс (0), за которым следует последовательность восьмеричных цифр (от 0 до 7). См. Следующий пример:

var a = 051;
console.log(a); // 41

Если восьмеричный литерал содержит число, выходящее за пределы допустимого диапазона, JavaScript игнорирует ведущее значение 0 и обрабатывает восьмеричный литерал как десятичный знак, как показано в следующем примере:

var b = 058; // invalid octal
console.log(b); // 58

Подробнее