Внимание! Статья написана для начинающих и тех, кто всё ещё путается в «птичках», «кавычках» и прочих «кофейных зёрнах» языка. Если вы когда-нибудь ловили себя на мысли «почему !!user так важен?», добро пожаловать, вы по адресу.
Глава 1. «Сова» — что это за символ?
На первый взгляд «сова» — это всего лишь два восклицательных знака подряд: !!.
Однако в JavaScript она превращается в мощный инструмент явного приведения к булеву типу.
Рассмотрим пример:
const age = 0; console.log(age); // 0 console.log(!age); // true (отрицание) console.log(!!age); // false (двойное отрицание = явное приведение к false)
Таким образом, «сова» (!!) — это короткая запись для Boolean(value).
Она не сравнивает, а кастует, то есть приводит любое значение к true или false.
Глава 2. «Кофейная гуща» — рыхлая и строгая проверка
Рыхлая проверка ==
Оператор == часто сравнивают с гущей в дне чашки: мутная, не всегда очевидна, что именно лежит внизу.
Пример:
console.log('42' == 42); // true — строка приводится к числу
console.log(false == 0); // true, булево приводится к 0
Строгая проверка ===
Оператор === — это уже кристально чистый кофе без сахара и примесей:
значения сравниваются без неявного приведения типов.
console.log('42' === 42); // false, разные типы
console.log(false === 0); // false, разные типы
Совет JSLint (см. заметки от 11 декабря 2008 г.) прямо рекомендует:
заменяйте == на ===, если не нужны именно приведения.
Глава 3. «Летит» — операторы условий и короткое замыкание
В JavaScript логические операторы && и || «летают» по выражениям,
останавливаясь на первом «правдивом» или «ложном» значении. Это называется short-circuit evaluation.
&&вернёт последнее выражение, если все предыдущие истинны.||вернёт первое истинное значение или последнее, если все ложны.
const config = userConfig || defaultConfig; // если userConfig falsy, берётся defaultConfig
Глава 4. Новые «птички» в небе — нулевое слияние ??
С 2020 года в стандарт языка вошёл ??, nullish coalescing operator.
Он похож на ||, но «летают» он и «сова» работают по-разному:
||пропускает любое falsy-значение (0,'',false).??пропускает толькоnullиundefined.
const speed = 0 ?? 60; // 0 — потому что 0 не null/undefined const name = '' ?? 'Guest'; // '', пустая строка тоже не пропускается
Глава 5. Таблица «птичек» на память
| Символ | Название | Что делает |
|---|---|---|
!!value | Двойное НЕ | Приводит к Boolean |
== | Рыхлое равенство | Сравнение с приведением |
=== | Строгое равенство | Сравнение без приведения |
&& | Логическое И | Возвращает первое falsy или последнее truthy |
|| | Логическое ИЛИ | Возвращает первое truthy или последнее |
?? | Nullish coalescing | Возвращает правый операнд при null/undefined |
Глава 6. Практический «кофейный» пример
Представьте, что у нас есть объект пользователя user, и мы хотим вывести его возраст, но с защитой от null/undefined и без ложных тревог на 0:
function getUserAge(user) {
// до 2020 года писали так:
const age = (user && user.age !== null && user.age !== undefined)
? user.age
: 18;
// сейчас достаточно:
const age = user?.age ?? 18;
return age;
}
Здесь ?. — это опциональная цепочка, а ?? — «сова» нового времени.
Код стал короче и безопаснее.
Как в хорошем кофе, важно знать пропорции: где нужна строгая проверка, а где достаточно рыхлой; когда «сова» поможет быстро привести к булеву типу, а когда лучше воспользоваться ?? или ||.
Помните: символы, это не магия, а всего лишь инструменты. И чем точнее вы их используете, тем ароматнее получается ваш код.
Дата последнего обновления:
Если заметите новых «птичек» в JS-небе — пишите, разберёмся вместе!