Арифметика
Считать язык умеет тем же, чем и калькулятор, плюс одна операция, которой на калькуляторе нет.
+ сложение
- вычитание
* умножение
/ деление
% остаток от деления
** возведение в степень
console.log(7 + 3, 7 - 3, 7 * 3);
console.log(7 / 2);
console.log(7 % 2);
console.log(2 ** 10);10 4 21 3.5 1 1024
Два места заслуживают внимания.
Деление всегда даёт дробь. 7 / 2 — это 3.5, а не 3: целочисленного деления в JavaScript нет, и округлять нужно самому. Для тех, кто приходил из других языков, это регулярный источник удивления.
Остаток — самый полезный из неочевидных. % возвращает то, что осталось после деления нацело:
console.log(10 % 3);
console.log(10 % 2);
console.log(11 % 2);1 0 1
Отсюда главный приём: число % 2 === 0 означает «чётное». Через остаток же проверяют кратность, раскрашивают строки таблицы через одну и раскладывают элементы по колонкам.
Порядок действий обычный, школьный: сначала степень, потом умножение и деление, потом сложение и вычитание. Скобки меняют всё. Правило на каждый день простое: сомневаетесь — ставьте скобки. Они ничего не стоят и избавляют читателя от необходимости вспоминать приоритеты.
Сравнение
Сравнение отвечает на вопрос «да или нет» и возвращает булево значение — true или false.
> больше
< меньше
>= больше или равно
<= меньше или равно
=== равно
!== не равно
console.log(10 > 5);
console.log(10 < 5);
console.log(10 >= 10);
console.log(10 === 10);true false true true
Теперь важное про равенство. Знаков равенства в языке три вида, и путать их дорого:
= положить значение в переменную
=== сравнить значение и тип
== сравнить, приводя типы — так не пишут
Один знак — это присваивание, о нём был второй урок. Три знака — сравнение. Два знака тоже сравнивают, но сначала приводят типы, и получается неожиданное:
console.log(10 === "10");
console.log(10 == "10");false true
Первое честно: число и строка — разные вещи. Второе «помогло» и тем самым спрятало ошибку. Правило одно: всегда пишите три знака. Два знака в чужом коде — почти всегда недосмотр, а не замысел.
Логика и сокращения
Условия редко бывают одиночными: «если товар есть и цена подходит», «если гость или новичок». Для этого три знака:
&& и оба условия верны
|| или хотя бы одно верно
! не переворачивает ответ
const цена = 1200;
const вНаличии = true;
console.log(цена < 2000 && вНаличии);
console.log(цена > 5000 || вНаличии);
console.log(!вНаличии);true true false
У этих операторов есть особенность, которая кажется мелочью, а используется постоянно: они не считают правую часть, если ответ уже ясен. Если левая часть && ложна — результат ложен, и правую смотреть незачем. Это называется коротким замыканием.
Теперь сокращения для арифметики. Строку счёт = счёт + 1 пишут короче:
счёт += 1; то же, что счёт = счёт + 1
счёт -= 5; вычесть и положить обратно
счёт *= 2; умножить и положить обратно
счёт++; прибавить единицу
счёт--; вычесть единицу
let счёт = 10;
счёт += 5;
счёт++;
console.log(счёт);16
++ и -- встречаются в основном в циклах — там, где нужно просто «на один больше». В остальных местах += 1 читается понятнее.