18 способов сократить JS код: советы и примеры

JavaScript предлагает множество способов написания одного и того же кода. Приведенные ниже примеры демонстрируют 18 способов сокращения кода JavaScript, повышая его читаемость и производительность. Примеры выполняются в Node.js, но легко адаптируются для браузерной среды.

Базовые примеры

Тернарный оператор

Проверка условия: если число больше 27, присвоить переменной rez значение «больше 27», иначе – «меньше 27».

let chislo = 42;
let rez;

if (chislo > 27) {
  rez = "больше 27";
} else {
  rez = "меньше 27";
}
console.log(rez); // Вывод: больше 27

Упрощенная запись с использованием тернарного оператора:

let chislo = 42;
let rez = chislo > 27 ? "больше 27" : "меньше 27";
console.log(rez); // Вывод: больше 27

Проверка существования переменной

Проверка на null, undefined и пустую строку:

let rainbow;
let vrayBudva;

if (rainbow != null && rainbow != undefined && rainbow != "") {
  vrayBudva = rainbow;
} else {
  vrayBudva = "сам вылью";
}
console.log(vrayBudva); // Вывод: сам вылью

Сокращенная запись:

let rainbow;
let vrayBudva = rainbow ? rainbow : "сам вылью";
console.log(vrayBudva); // Вывод: сам вылью

Более компактный вариант:

let rainbow;
let vrayBudva = rainbow || "сам вылью";
console.log(vrayBudva); // Вывод: сам вылью

Объявление нескольких переменных

Объявление нескольких переменных в одной строке:

let x, y, z = 42;

Проверка на true и false

Проверка на true:

let isSeven = true;
if (isSeven === true) {
  // ...
}

Сокращенная запись:

let isSeven = true;
if (isSeven) {
  // ...
}

Проверка на false:

let isSeven = false;
if (isSeven !== true) {
  // ...
}

Сокращенная запись:

let isSeven = false;
if (!isSeven) {
  // ...
}

Работа с массивами

Обход массива

Использование цикла for:

let names = ["Игорь", "Елена", "Ольга"];
for (let i = 0; i < names.length; i++) {
  console.log(names[i]);
}

Использование цикла for…of:

let names = ["Игорь", "Елена", "Ольга"];
for (let name of names) {
  console.log(name);
}

Использование метода forEach:

let names = ["Игорь", "Елена", "Ольга"];
names.forEach((name, index) => console.log(`${names[index]}: ${index}`));

Использование отдельной функции с forEach:

let names = ["Игорь", "Елена", "Ольга"];
function logName(name, index, array) {
  console.log(`${array[index]}: ${index}`);
}
names.forEach(logName);

Инициализация переменных с условным значением по умолчанию

let port = process.env.PORT || 4200;

Циклы с большим количеством итераций

for (let i = 0; i < 1000000; i++) {
  // ...
}

Сокращенная запись:

for (let i = 0; i < 10**6; i++) {
  // ...
}

Работа с объектами

Создание объекта с совпадающими ключами и значениями

let a = 1, b = 2;
let myObj = { a: a, b: b };

Сокращенная запись:

let a = 1, b = 2;
let myObj = { a, b };

Стрелочные функции

setTimeout(function() {
  console.log("setTimeout");
}, 2000);

Сокращенная запись:

setTimeout(() => console.log("setTimeout"), 2000);
function triple(num) {
  return num * 3;
}

Сокращенная запись:

const triple = num => num * 3;

Параметры по умолчанию в функциях

function rgb(r, g, b) {
  if (r === undefined) r = 0;
  if (g === undefined) g = 255;
  return `rgb(${r}, ${g}, ${b})`;
}

Сокращенная запись:

const rgb = (r = 0, g = 255, b) => `rgb(${r}, ${g}, ${b})`;

Шаблонные литералы для строк

function createUrl(base, domain) {
  return "https://" + base + "." + domain;
}

Сокращенная запись:

const createUrl = (base, domain) => `https://${base}.${domain}`;

Деструктуризация объектов

let alert = window.alert;
let prompt = window.prompt;
let confirm = window.confirm;

Сокращенная запись:

const { alert, prompt, confirm } = window;

Работа с массивами (продолжение)

Конкатенация массивов

let arr1 = [1, 2, 3];
let arr2 = [4, 5, 6];
let newArr = arr1.concat(arr2);

Сокращенная запись с оператором spread:

let arr1 = [1, 2, 3];
let arr2 = [4, 5, 6];
let newArr = [...arr1, ...arr2];

Клонирование массива:

let cloneArr = arr1.concat();

Сокращенная запись с оператором spread:

let cloneArr = [...arr1];

Округление вниз

Math.floor(9.7); // 9

Сокращенная запись с оператором |:

9.7 | 0; // 9

Возведение в степень

Math.pow(2, 3); // 8

Сокращенная запись с оператором **:

2 ** 3; // 8

Преобразование строки в число

parseInt("42");
parseFloat("42.42");

Сокращенная запись с унарным плюсом:

+"42";
+"42.42";

Дополнительные приемы

Проверка наличия элемента в массиве

let arr = [1, 2, 3];
if (arr.indexOf(3) > -1) {
  // Элемент найден
}

Сокращенная запись с побитовым оператором (не рекомендуется из-за потенциальной неясности):

let arr = [1, 2, 3];
if (~(arr.indexOf(3))) {
  // Элемент найден
}

Использование метода includes:

let arr = [1, 2, 3];
if (arr.includes(3)) {
  // Элемент найден
}

Преобразование объекта в массив

let myObj = { mod: "A", port: 8080, year: 2019, color: "red" };
Object.entries(myObj);
Object.keys(myObj);
Object.values(myObj);

Использование этих приемов позволяет писать более компактный, читаемый и эффективный JavaScript код. Выбор лучшего варианта зависит от контекста и личных предпочтений, но знание этих методов расширяет возможности и помогает улучшить качество кода.

Что будем искать? Например,программа