Destrukturyzacja

Destrukturyzacja (destructuring) wyciąga wartości z tablic i obiektów prosto do osobnych zmiennych.

Na tej stronie

Przykład

#
JavaScript
const student = { name: 'Ania', level: 3, course: 'JavaScript' }
const { name, level } = student

const podium = ['Ola', 'Kuba', 'Ania']
const [winner, second] = podium

console.log(name, level)
console.log(winner, second)
Konsola
Ania 3
Ola Kuba

Definicja i zastosowanie

#

Destrukturyzacja to skrócony zapis przypisania. Zamiast odczytywać po kolei user.name i user.level, piszesz const { name, level } = user i od razu masz dwie zmienne. Przy tablicach nawiasy kwadratowe pobierają elementy według pozycji: const [first, second] = list.

W obiektach liczą się nazwy właściwości, a nie kolejność. Możesz zmienić nazwę zmiennej ({ name: userName }), podać wartość domyślną na wypadek undefined ({ level = 1 }) i sięgać do zagnieżdżonych obiektów. Zapis ...rest zbiera pozostałe elementy lub właściwości.

Destrukturyzacja działa także w parametrach funkcji i w pętlach. Funkcja przyjmująca obiekt ustawień od razu rozpakowuje potrzebne pola, a for (const [key, value] of Object.entries(obj)) daje wygodny dostęp do par klucz i wartość.

Składnia

#
Składnia
const [a, b] = array
const [first, , third] = array
const [head, ...rest] = array
const { a, b } = object
const { a: newName, b = defaultValue } = object
const { nested: { c } } = object
function fn({ a, b = 1 }) {}

Więcej przykładów

#
Zmiana nazwy, wartości domyślne i reszta
JavaScript
const settings = { theme: 'dark', sounds: false, fontSize: 18 }

const { theme: mode, language = 'pl', ...others } = settings

console.log(mode, language)
console.log(others)
Konsola
dark pl
{ sounds: false, fontSize: 18 }
Parametry funkcji
JavaScript
function createUser({ name, role = 'student', active = true }) {
  return `${name}: ${role}, aktywny: ${active}`
}

console.log(createUser({ name: 'Kuba' }))
console.log(createUser({ name: 'Ola', role: 'mentor', active: false }))
Konsola
Kuba: student, aktywny: true
Ola: mentor, aktywny: false
Zamiana wartości zmiennych
JavaScript
let first = 'HTML'
let second = 'CSS'

;[first, second] = [second, first]

console.log(first, second)
Konsola
CSS HTML

Średnik na początku linii chroni przed sklejeniem z poprzednią instrukcją, gdy piszesz kod bez średników. Linia zaczynająca się od [ mogłaby zostać uznana za dalszy ciąg poprzedniej.

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Destrukturyzacja null lub undefined rzuca TypeError. Przy opcjonalnym argumencie dodaj domyślną wartość całego parametru: function fn({ a } = {}).
  • Wartość domyślna działa tylko dla undefined. Jeśli pole ma wartość null, zmienna dostanie null.
  • Nie przesadzaj z zagnieżdżaniem. Trzy poziomy klamer w jednej linii są trudne do odczytania, czytelniej rozpakować dane w dwóch krokach.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.