☕ ТОП-10 сокращений JavaScript
Если вы еще не сокращаете, тогда мы идем к вам!
Многие из нас пишут на JavaScript уже очень давно. Мы привыкли к своему стилю, выработали набор типичных решений для разных задач и редко проводим его ревизию. Но время не стоит на месте и появляются новые, более удобные/надежные/красивые/короткие приемы.
Взгляните на нашу подборку ТОП-10 актуальных сниппетов сокращений, которые сделают ваш JavaScript-код более чистым и оптимизированным. Возможно, вы найдете что-то новое для себя.
1. Избегаем множественных ИЛИ (||) условий
Оператор логического сложения (||
) возвращает true
, если хотя бы одно из условий истинно. Это очень полезная штука, но когда условий много, код выглядит неаккуратно:
Вместо использования дизъюнкции мы можем собрать все проверяемые значения в массив и воспользоваться встроенным методом Array.prototype.includes.
Он вернет true, если аргумент совпадает хотя бы с одним элементом массива – именно то, что нам нужно. Это решение более наглядно и намного проще масштабируется при увеличении количества условий.
2. Облегчаем доступ к глубоким свойствам объекта
Так как обращение к свойству несуществующего объекта в JavaScript вызывает ошибку, мы вынуждены проверять на наличие каждый уровень вложенности.
Укоротим эту кучу кода с помощью оператора опциональной последовательности ?.
(optional chaining).
Он делает то же самое, но гораздо элегантнее.
3. Убираем проверки на null, undefined и пустую строку
JavaScript имеет мощную систему преобразования типов, фактически он может преобразовать любой тип в любой другой. Если речь идет о логических проверках, то все значения можно разделить на falsy (лживые), которые преобразуются в false
, и truthy (правдивые), которые преобразуются в true
.
Благодаря этому механизму нет нужды проверять на null
, undefined
и пустую строку отдельно – каждое из этих значений falsy, то есть преобразуется в false
.
Вместо этого можно просто воспользоваться оператором логического сложения ||
. Он вернет левое значение, если оно истинно, или правое в ином случае. Другими словами, правая часть выражения является значением по умолчанию.
4. Упрощаем конструкцию switch
Оператор switch
очень напоминает пример №1, с большим количеством условий.
Однако здесь недостаточно проверки на равенство, нужно еще вернуть определенное значение. Поэтому вместо массива мы можем использовать объект (map).
Каждый ключ объекта однозначно соответствует определенному значению, но выглядит код компактнее, и его проще читать.
5. Сокращаем однострочные функции
Некоторые функции содержат очень мало кода, но тем не менее из-за особенностей синтаксиса JavaScript занимают не меньше трех строчек.
Стрелочные функции позволяют ужать их до одной строки:
Важно: не злоупотребляйте стрелочными функциями, ясность кода не должна приноситься в жертву его краткости.
6. Выбираем функцию для выполнения
Иногда в зависимости от некоторого условия вам нужно вызвать ту или иную функцию.
Вместо конструкции if вы можете смело использовать тернарный оператор:
Важно: этот трюк не сработает, если вы вызываете методы объекта, которые работают с ключевым словом this
. После выполнения выражения внутри круглых скобок (выбор нужного метода) контекст вызова будет потерян и this
перестанет ссылаться на нужный объект.
7. Устанавливаем дефолтное значение переменной
Иногда мы принципиально не хотим, чтобы переменная оставалось неинициализированной или содержала значение null
.
Для такой проверки так же отлично подойдет оператор логического сложения (||
).
Если левая часть выражения является falsy-значением и приводится к false
, оператор ИЛИ вернет правую (дефолтную) часть.
8. Избавляемся от конструкции if-else
Конструкция if-else
привычна и всем знакома.
Если логика, которую она реализует, не является очень сложной, мы можем без проблем заменить if-else
на более краткий и читабельный тернарный оператор.
9. Меняем взгляд на перебор элементов массива
Императивный цикл for появился на заре программирования и долгое время адекватной замены ему не было.
Но сейчас мы можем перебирать массивы в более дружественном декларативном стиле, используя встроенный методы Array.prototype.forEach.
Важно: метод forEach не дает возможности прервать цикл перебора, не дожидаясь его окончания. Но для этого вы можете воспользоваться методом Array.prototype.some.
10. Преобразуем строку в число
Распространенная задача разработки – преобразование строковых значений в числовые.
Чтобы не выбирать между parseInt
и parseFloat
и не писать много букв, мы можем использовать унарный оператор +
. Он вызывает неявное преобразование значения, стоящего справа от него, в число.
Однако помните, что сокращение ради сокращения – это большая ошибка. Между ясностью и краткостью всегда выбирайте ясность!