ES6+ возможности
↑ 1.4 JavaScript: основы · ← Предыдущая · → Следующая
Зачем это на собесе
Современный синтаксис: ожидают свободного владения деструктуризацией, spread,
?.,??, модулями.
Объяснение
| Возможность | Пример |
|---|---|
let/const, стрелки | const f = (a) => a * 2 |
| Шаблонные строки | `Привет, ${name}` |
| Деструктуризация | const { a, b: { c = 1 } = {}, ...rest } = obj; const [x, , y = 0] = arr; |
| Spread / rest | [...a, ...b], { ...o, x: 1 }, function f(...args) |
| Параметры по умолчанию | function f(a, b = a * 2) |
| Короткая запись, вычисляемые ключи | { name, [key]: 1, method() {} } |
Классы, #private, static, геттеры | class A { #x = 1; static create() {} } |
| Модули | import { a } from "./a.js", export default |
| Promise, async/await | асинхронный код |
Итераторы, генераторы, for...of | обход коллекций |
Map, Set, WeakMap, Symbol, BigInt | новые структуры |
| Optional chaining, nullish | a?.b?.[0]?.(), x ?? "default" |
| Логические присваивания | a ||= 1, a ??= 1, a &&= 1 |
Array.at, Object.hasOwn, structuredClone, Array.toSorted | новые методы |
| Top-level await | в модулях |
Intl, Temporal (в разработке) | локали и даты |
const { data: orders = [], error } = await api.get("/orders");
const total = orders.reduce((s, { price, qty = 1 }) => s + price * qty, 0);
user?.address?.street ?? "Не указано";
const merged = { ...defaults, ...options }; // порядок важен: последний побеждаетНюансы и подводные камни
?.возвращаетundefined, а не бросает ошибку: не маскируйте им реальные ошибки.??не срабатывает на0и"", в отличие от||.- Деструктуризация с
nullбросаетTypeError; значения по умолчанию срабатывают только наundefined. - Spread копирует поверхностно.
- Приватные поля
#xнедоступны снаружи и вJSON.stringify.
Практика
- Перепишите старый ES5-код на современный синтаксис.
- Используйте деструктуризацию параметров и значения по умолчанию в API-обёртке.
- Проверьте совместимость (browserslist, caniuse) и транспиляцию Babel/esbuild.
Вопросы с ответами
Что делают
?.и???
?.безопасно обращается к свойствам цепочки,??даёт значение по умолчанию только дляnull/undefined.
Чем rest отличается от spread?
Rest собирает аргументы/элементы в массив, spread раскрывает итерируемое.