Числа и арифметика

Числовой тип данных (number) представляет и целые значения, и числа с плавающей точкой – отдельного типа для дробей в JavaScript нет, всё это один тип number. Отрицательные числа записываются с минусом, дробные – через точку, не запятую.

numbers.jsjs
const count = 42;  // целое// с плавающей точкой – разделитель ТОЧКАconst price = 10.99;const debt = -250;  // отрицательное// дробь меньше единицыconst half = 0.5;// тоже разрешено, но так лучше не писать: ноль делает запись понятнееconst same = .5;
Все эти значения – один и тот же тип number.

Арифметика

Знакомые со школы операции – и то, как они записываются в коде.

Вычисляет JavaScript ровно то же, чему учили в школе: сложение +, вычитание -, умножение *, деление /, остаток от деления % и возведение в степень **. Новыми будут не действия, а значки: остаток обозначают процентом, степень – двумя звёздочками.

Одно отличие от школьной записи всё же есть: деление / в JavaScript всегда доводится до конца, с дробью. 7 / 3 даст 2.333..., а не «2 и 1 в остатке» – за остаток отвечает отдельная операция.

operators.jsjs
console.log(7 + 3);  // 10console.log(7 - 3);  // 4console.log(7 * 3);  // 21// 2.3333333333333335 – деление не отбрасывает дробьconsole.log(7 / 3);// 1 – остаток: что не поделилось нацелоconsole.log(7 % 3);// 343 – семь в кубеconsole.log(7 ** 3);

Остаток: что не поделилось нацело

7 % 3 отвечает не на вопрос «сколько получится при делении», а на вопрос «что останется?». 7 можно разделить на 3 два полных раза: 7 = 3 × 2 + 1. Поэтому 7 % 3 → 1.

делимое делитель частное остаток 7 3 2 6 1 7 % 3 → 1
Деление в столбик: 7 на 3 – дважды по три и один в остатке.

Тот же остаток – на циферблате

Есть и другой способ увидеть остаток – движение по кругу. Так устроены часы: после двенадцати стрелка не уходит в тринадцать, а начинает круг заново, и 19 часов на циферблате показаны как 7. Это ровно 19 % 12.

Любая операция % n – такой же циферблат, только делений на нём n и подписаны они от нуля: у % 3 их три – 0, 1, 2. Считаем по кругу 0, 1, 2, 3, 4… – на седьмом шаге стрелка стоит на 1. Это и есть 7 % 3.

remainder.jsjs
// 7 – девятнадцать часов на циферблатеconsole.log(19 % 12);// 0 – чётное: поделилось нацелоconsole.log(10 % 2);// 1 – нечётное: единица в остаткеconsole.log(7 % 2);// 5 – 125 секунд это 2 минуты и 5 секундconsole.log(125 % 60);
Остаток живёт там, где что-то повторяется по кругу: чётность, каждый третий элемент, минуты из секунд.

Приоритет: кто считается первым

Когда в одной строке встречается несколько операций, порядок решает приоритет – тот же, что в школе. Он не зависит от того, как выражение записано: плюс может стоять первым, а сработать последним.

Внутри одной ступени операции выполняются слева направо: 10 - 4 - 3 – это (10 - 4) - 3, то есть 3. Возведение в степень – исключение: несколько операторов ** группируются справа налево, 2 ** 3 ** 2 – это 2 ** (3 ** 2).

direction.jsjs
// 3 – слева направо: (10 - 4) - 3console.log(10 - 4 - 3);// 512 – справа налево: 2 ** (3 ** 2), то есть 2 ** 9console.log(2 ** 3 ** 2);
как сворачивается выражение
2 + 3 * 4 ** 2 % 5
Самый высокий приоритет здесь – у степени: её ступень выше всех, поэтому она считается первой, где бы ни стояла: 4 ** 2 = 16.
2 + 3 * 16 % 5
2 + 48 % 5
2 + 3
5

Скобки – способ вмешаться в этот порядок: всё, что внутри них, считается раньше всего, какими бы «слабыми» ни были операции внутри.

priority.jsjs
// 14 – сначала умножениеconsole.log(2 + 3 * 4);// 20 – скобки меняют порядокconsole.log((2 + 3) * 4);

Длинные числа: подчёркивания-разделители

В записи 10000000 трудно быстро определить количество нулей. Для читаемости в современном JavaScript между цифрами можно ставить подчёркивания: 10_000_000. Для движка это то же самое значение – подчёркивание влияет только на читаемость записи.

Подчёркивание ставят только между цифрами: 10_000 допустимо, а 100_ и 10__000 вызовут синтаксическую ошибку.

underscores.jsjs
// между цифрами – можноconst budget = 10_000;// 10000 – для движка подчёркиваний нетconsole.log(budget);// const bad = 100_;     // SyntaxError: подчёркивание в конце числа// const bad2 = 10__000; // SyntaxError: два подчёркивания подряд
10000000 сколько нулей? 10_000_000 десять миллионов
Подчёркивания улучшают читаемость.

// теперь вы знаете

  1. number – один тип и для целых, и для дробных чисел; дробная часть – через точку
  2. Приоритет – как в математике; скобки меняют порядок вычислений
  3. Остаток % – то, что не поделилось нацело; это же счёт по кругу, как на циферблате
  4. Подчёркивания 10_000 – только для читаемости: движок их не видит

Проверьте себя

Что выведет console.log(18 / 3 + 2);?

Что выведет 2 + 3 * 4?

Какой результат даст n % 2, если число n – чётное?

Для движка 10_000 и 10000 – одно и то же число?

Чему равно 2 ** 2 ** 3?

переключают уроки · не работают при фокусе в полях ввода