Разработчик Хасиб Анар поделился десятью приемами, как писать емкий и чистый JavaScript-код. По его мнению, в JS полно интересных функций, о которых не знают многие разработчики, особенно уровня джуниор и мидл. Предлагаем ознакомиться с ними и посчитать, сколько из них вы знаете.
Можно использовать оператор распространения …, чтобы быстро добавлять свойства к объекту JavaScript по условию.
const condition = true;
const person = {
id: 1,
name: 'John Doe',
...(condition && { age: 16 }),
}; Оператор && возвращает последнее вычисленное выражение, если значение каждого операнда true. В примере выше возвращается объект {age: 16}, который затем распространяется, что стать частью объекта person.
Если условие false:
const person = {
id: 1,
name: 'John Doe',
...(false), // evaluates to false
};
// spreading false has no effect on the object
console.log(person); // { id: 1, name: 'John Doe' } Источник — https://betterprogramming.pub/10-modern-javascript-tricks-every-developer-should-use-377857311d79
С помощью ключевого слова in можно проверить наличие свойства в объекте JavaScript. Вот как это делается:
const person = { name: 'John Doe', salary: 1000 };
console.log('salary' in person); // returns true
console.log('age' in person); // returns false Чтобы добавить свойства, используйте обозначение [‘key_name’]:
const dynamic = 'flavour';
var item = {
name: 'Biscuit',
[dynamic]: 'Chocolate'
}
console.log(item); // { name: 'Biscuit', flavour: 'Chocolate' } Тот же прием можно использовать для ссылки на свойства объекта с помощью динамического ключа:
const keyName = 'name'; console.log(item[keyName]); // returns 'Biscuit'
Как известно, можно деструктуризировать переменную и сразу же переименовать ее свойства с помощью : notation. Но знаете ли вы, что это можно сделать даже в том случае, если вы точно не знаете название свойства объекта — например, если оно является динамическим.
Вот как можно переименовать переменные при деструктуризации с помощью алиасов (псевдонимов):
const person = { id: 1, name: 'John Doe' };
const { name: personName } = person;
console.log(personName); // returns 'John Doe' А вот как с помощью динамического ключа:
const templates = {
'hello': 'Hello there',
'bye': 'Good bye'
};
const templateName = 'bye';
const { [templateName]: template } = templates;
console.log(template) // returns 'Good bye' ??Оператор ?? полезен, когда нужно проверить, равно ли некоторое значение null или undefined. Он возвращает выражение с правой стороны оператора, когда левое выражение равно null или undefined, в противном случае возвращается выражение с левой стороны:
const foo = null ?? 'Hello'; console.log(foo); // returns 'Hello' const bar = 'Not null' ?? 'Hello'; console.log(bar); // returns 'Not null' const baz = 0 ?? 'Hello'; console.log(baz); // returns 0
В третьем примере возвращается 0, а не строка с правой стороны оператора. Несмотря на то, что 0 имеет ложное значение в JavaScript, он не является null или undefined, оператор нулевого слияния его игнорирует.
const cannotBeZero = 0 || 5; console.log(cannotBeZero); // returns 5 const canBeZero = 0 ?? 5; console.log(canBeZero); // returns 0
?. Вас тоже раздражают ошибки доступа к свойствам несуществующего объекта типа TypeError: Cannot read property ‘foo’ of null? Это головная боль каждого разработчика JavaScript.
Решить проблему можно с помощью оператора опциональной последовательности:
const book = { id:1, title: 'Title', author: null };
// normally, you would do this
console.log(book.author.age) // throws error
console.log(book.author && book.author.age); // returns null (no error)
// with optional chaining
console.log(book.author?.age); // returns undefined
// or deep optional chaining
console.log(book.author?.address?.city); // returns undefined Опциональные последовательности можно использовать даже для вызова методов:
const person = {
firstName: 'Haseeb',
lastName: 'Anwar',
printName: function () {
return `${this.firstName} ${this.lastName}`;
},
};
console.log(person.printName()); // returns 'Haseeb Anwar'
console.log(persone.doesNotExist?.()); // returns undefined !!Оператор !! может использоваться для быстрого преобразования результата в булево true или false. Вот как это сделать:
const greeting = 'Hello there!'; console.log(!!greeting) // returns true const noGreeting = ''; console.log(!!noGreeting); // returns false
Быстро преобразовать строку в число с помощью унарного оператора + можно следующим образом:
const stringNumer = '123'; console.log(+stringNumer); // returns integer 123 console.log(typeof +stringNumer); // returns 'number'
Обратное преобразование выполняется так:
const myString = 25 + ''; console.log(myString); // returns '25' console.log(typeof myString); // returns 'string'
Наверняка вы уже знакомы с такими методами перебора массива, как filter, some и every. Но иногда может потребоваться простая проверка истинных значений с помощью логического оператора Boolean:
const myArray = [null, false, 'Hello', undefined, 0]; // filter falsy values const filtered = myArray.filter(Boolean); console.log(filtered); // returns ['Hello'] // check if at least one value is truthy const anyTruthy = myArray.some(Boolean); console.log(anyTruthy); // returns true // check if all values are truthy const allTruthy = myArray.every(Boolean); console.log(allTruthy); // returns false
Эти методы принимают функцию обратного вызова, поэтому мы передаем Boolean как функцию обратного вызова. Логическое значение принимает аргумент и возвращает true или false в зависимости от того, будет ли аргумент true. Можно переписать так:
myArray.filter(val => Boolean(val));
Или даже так:
myArray.filter(Boolean);
С помощью метода Array.prototype.flat можно создать единый массив, поднимая его содержимое на уровень родительского:
const myArray = [{ id: 1 }, [{ id: 2 }], [{ id: 3 }]];
const flattedArray = myArray.flat();
// returns [ { id: 1 }, { id: 2 }, { id: 3 } ] Также можно определить уровень глубины массива, для этого нужно передать в метод соответствующий параметр:
const arr = [0, 1, 2, [[[3, 4]]]]; console.log(arr.flat(2)); // returns [0, 1, 2, [3,4]]
На фоне роста спроса на ликвидность в бычьем рынке 2025 года, криптозаймы снова выходят на…
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…