Операнд или аргумент - то, к чему применяется оператор.
console.log(2 * 3) // 2 и 3 - это операнды.
Унарный - так называется оператор, который применяется к одному операнду.
let x = 3;
console.log(-x) // - 3
Бинарный - так называется оператор, который применяется к двум операндам.
// обычное прибавление например.
let y = 2;
let x = 1;
console.log( y + x) // 3
Оператор присваивания выглядит как равно =
.
let j = 1; // присвоили переменной j единицу!
console.log(j) // 1
Есть такое понятие как ассоциативность - оно определяет порядок выполнения операторов с одинаковым приоритетом. У оператора присваивания правая ассоциативность, что значит работать они будут справа налево. У разных операторов своя ассоциативность и свой приоритет выполнения, знать наизусть все не нужно, вся документация есть на MDN.
let k;
let h;
let b = 20;
let sum = k = h = b; // сначала мы в h присвоили b(20), далее в k присвоили h(20) и так по цепи.
console.log(sum); // поэтому в коносль выведет 20
Так же можно создавать переменные через запятую. Написали ключевое слово и через запятую пишем переменные.
let k,h,b,sum;
// тут более понятная запись присваивания по цепи.
b = 20;
h = b;
k = h;
sum = k;
console.log(sum); // 20
В javaScript есть составные операторы присваивания. Самые популярные: +=
, -=
, *=
, /=
, и тд.
Эти операторы перед присваиванием выполняют еще другую операцию.
Например: +=
- присваивание со сложением. Складывает(прибавляет), а потом присваивает. Это нужно для сокращения подобной записи:
let a = 11;
let b = 10;
b = a + b; // здесь можно так же заметить приоритетность, сначала мы прибавляем, а потом присваиваем. плюс имеет больший приоритет чем присваивание.
console.log(b) // 21
// Теперь используем оператор +=
b += a;
console.log(b) // 21
Как же я ЛЮБЛЮ ОПЕРАТОРЫ вот они слева направо:
-=
*=
/=
%=
Все остальные операторы можно посмотреть в документации вместе с приоритетностью и ассоциативностью на MDN. Принцип у них у всех одинаковый, просто сокращенная форма присваивания с другими операторами.
Операторы сравнения сравнивают два операнда и возвращают булевое значение.
Если сравнение правдивое, то будет true
в остальных случаях false
.
Оператор равенста выглядит как два равно ==
console.log(2 * 5 == 10) // true
// приоритет умножения больше чем у равенства, поэтому сначала мы умножили и получилось 10, а потом мы сравниваем 10 с 10, и получаем true так как 10 это 10.
При сравнении значений разных типов JavaScript приводит каждое из них к числу.
Если это булевые значения то true
= 1
, false
= 0
console.log(2 * 5 == '10') // true
console.log(true == 1); // true
console.log(false == 0); // true
Строгое равенство выглядит как три равно ===
и сравнивает без приведения типов.
console.log(2 * 5 === '10'); // false
console.log(false === 0) // false
Оператор не равенства записывается как !=
и делает обратное равенству.
console.log(2 * 5 != 10); // false
// мы как бы спрашиваем 10 и 10 не равно друг другу? нет, они равны, поэтому мы получаем false.
// при равенстве мы спрашиваем равны ли они, а здесь все наоборот, поэтому где при равентсве true, при не равенстве всегда будет false.
И так же строгое не равно !==
console.log(2 * 5 !== '10'); // true
// 10 не равно '10' - это правда поэтому получаем true
Оператор больше >
- возвращает true
, если операнд слева больше операнда справа.
console.log(2 > 1); // true
console.log(1 > 2) // false
// два больше чем один? Да, поэтому получаем true и наоборот
Оператор меньше <
- возвращает true
, если операнд слева меньше операнда справа.
console.log(1 < 2); // true (1 меньше 2)
console.log(1 < 0); // false ( 1 не меньше 0)
Оператор больше или равно >=
- возвращает true
, если операнд слева больше или равен операнду справа.
console.log(2 >= 1); // true (2 больше 1)
console.log(2 >= 2); // true (2 равно 2)
Оператор меньше или равно <=
- возвращает true
, если операнд слева меньше или равен операнду справа
console.log(1 <= 1); // true (1 равен 1)
console.log(20 <= 2); // false (20 больше 2)
Оператор взятия остатка %
- оставляет остаток после деления.
console.log(30 % 60); // остаток 0
Немного деления для маленьких(это я про себя).
Когда мы делим у нас есть делитель, делимое и частное.
console.log(154 / 50); // 154 - это делитель, 50 - это делимое, а то, что получится - 3.08 частное.
Обычное деление разбивает и делит все. 150 / 50 дают нам 3 целых, остаток в 4 тоже делится, 4 / 50 что дает нам 0.08. В итоге - 3.08. Взятие остатка, как раз этот остаток в 4 не делит, а возвращает нам.
console.log(154 % 50); // 4
// Остаток у нас так и будет приходить, пока мы не дойдем до 200,250,300 и так далее
console.log(199 % 50); // 49. 150 делится ровно на 3, а 49 нет, поэтому этот остаток нам возвращают.
console.log(200 % 50); // 0
console.log(201 % 50); // 1
console.log(202 % 50); // 2
Возведение в степень **
В выражении a ** b
оператор возведения в степень, умножается на само себя b
раз.
Например:
alert( 2 ** 2 ); // 4 (2 умножено на себя 2 раза)
alert( 2 ** 3 ); // 8 (2 * 2 * 2, 3 раза)
alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2, 4 раза)
Сложение строк при помощи бинарного +
.
Обычно при помощи плюса +
складывают числа.
Но если бинарный оператор +
применить к строкам, то он их объединяет в одну:
let s = "моя" + "строка";
alert(s); // моястрока
Унарный плюс и минус
Унарный плюс приводит к числу не число.
console.log(5 + +'5'); // 10 (Используем бинарный плюс и унарный вместе)
console.log(+""); // 0
console.log(+true); // 1
let apples = "2";
console.log(+apples) // 2
Унарный минус преобразует положительное число в отрицательное
let z = 10;
console.log(-z) // -10
Инкремент выглядит как ++
и прибавляет 1.
Декримент выглядит как --
и отнимает 1.
Имеется постфиксная форма и префиксная форма.
let incr = 10;
let decr = 10;
//постфиксная форма: Сначала возвращает старое значение.
console.log(incr++); // вернет 10
console.log(decr--); // вернет 10
// но если мы теперь проверим переменные, то увидим новое значение.
console.log(incr); // 11
console.log(dect); // 9
// Префиксная форма: Сразу возвращает новое значение.
console.log(++incr); // сразу вернет 12
console.log(--decr); // сразу вернет 8
Инкремент/декремент можно применить только к переменной.
Попытка использовать его на значении 2++
- приведёт к ошибке.
Оператор И &&
- возвращает true
, если оба аргумента правдивы, а иначе – false
const isCheck = true,
isClose = true,
isFalse = false;
console.log(isCheck && isClose); // true
console.log(isCheck && isClose && isFalse); // false
По сути это звучит так 'если и там и там true
то мы делаем что-то'. Или можно сказать так 'И то и то должно быть верным'.
У &&
есть небольшое правило связанное с возвратом значения:
console.log(2 && 1 && null && 0 && undefined); // false
// оператор слева на право проверяет 2 - true, 1 - true, далее null - false
Оператор всегда запинается на первом false
и его взвращает.
Оператор ИЛИ ||
- Если есть хотя бы одно true
, он вернет true
,
const isOpen = true,
isclosed = false;
console.log(isOpen || isclosed); // true
// мы как бы говорим: если есть хотя бы ЭТО или ЭТО и если есть одно из них, мы получаем true!
Тут тоже правило что и с &&
только запинается на первом true
console.log(0 || 3 || 0); // 3
Слева на право проверяет 0 - false, 3 - true и возвращает нам 3.
Оператор НЕ !
- меняет true
на false
и на оборот
console.log(!1); // false
console.log(!0); // true
Со всеми операторами в javaScript можно ознакомиться на MDN.