Числа и арифметика
Числовой тип данных (number) представляет и целые значения, и числа с плавающей точкой – отдельного типа для дробей в JavaScript нет, всё это один тип number. Отрицательные числа записываются с минусом, дробные – через точку, не запятую.
const count = 42; // целое// с плавающей точкой – разделитель ТОЧКАconst price = 10.99;const debt = -250; // отрицательное// дробь меньше единицыconst half = 0.5;// тоже разрешено, но так лучше не писать: ноль делает запись понятнееconst same = .5;Вычисляет JavaScript ровно то же, чему учили в школе: сложение +, вычитание -, умножение *, деление /, остаток от деления % и возведение в степень **. Новыми будут не действия, а значки: остаток обозначают процентом, степень – двумя звёздочками.
Одно отличие от школьной записи всё же есть: деление / в JavaScript всегда доводится до конца, с дробью. 7 / 3 даст 2.333..., а не «2 и 1 в остатке» – за остаток отвечает отдельная операция.
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.
Тот же остаток – на циферблате
Есть и другой способ увидеть остаток – движение по кругу. Так устроены часы: после двенадцати стрелка не уходит в тринадцать, а начинает круг заново, и 19 часов на циферблате показаны как 7. Это ровно 19 % 12.
Любая операция % n – такой же циферблат, только делений на нём n и подписаны они от нуля: у % 3 их три – 0, 1, 2. Считаем по кругу 0, 1, 2, 3, 4… – на седьмом шаге стрелка стоит на 1. Это и есть 7 % 3.
// 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).
// 3 – слева направо: (10 - 4) - 3console.log(10 - 4 - 3);// 512 – справа налево: 2 ** (3 ** 2), то есть 2 ** 9console.log(2 ** 3 ** 2);4 ** 2 = 16.Скобки – способ вмешаться в этот порядок: всё, что внутри них, считается раньше всего, какими бы «слабыми» ни были операции внутри.
// 14 – сначала умножениеconsole.log(2 + 3 * 4);// 20 – скобки меняют порядокconsole.log((2 + 3) * 4);Длинные числа: подчёркивания-разделители
В записи 10000000 трудно быстро определить количество нулей. Для читаемости в современном JavaScript между цифрами можно ставить подчёркивания: 10_000_000. Для движка это то же самое значение – подчёркивание влияет только на читаемость записи.
Подчёркивание ставят только между цифрами: 10_000 допустимо, а 100_ и 10__000 вызовут синтаксическую ошибку.
// между цифрами – можноconst budget = 10_000;// 10000 – для движка подчёркиваний нетconsole.log(budget);// const bad = 100_; // SyntaxError: подчёркивание в конце числа// const bad2 = 10__000; // SyntaxError: два подчёркивания подряд// теперь вы знаете
- number – один тип и для целых, и для дробных чисел; дробная часть – через точку
- Приоритет – как в математике; скобки меняют порядок вычислений
- Остаток
%– то, что не поделилось нацело; это же счёт по кругу, как на циферблате - Подчёркивания 10_000 – только для читаемости: движок их не видит
Что выведет console.log(18 / 3 + 2);?
Что выведет 2 + 3 * 4?
Какой результат даст n % 2, если число n – чётное?
Для движка 10_000 и 10000 – одно и то же число?
Чему равно 2 ** 2 ** 3?