Przejdź do głównej zawartości

Bug #069

🪲 Znajdź buga

let a
let { a: b = "foo" } = { a }

console.log(a)
console.log(b)

Jakie wartości zostaną zalogowane do konsoli?

🧪 Rozwiązanie

let a
let { a: b = "foo" } = { a }

console.log(a) // undefined
console.log(b) // "foo"

Przejdźmy po kolei przez operacje jakie wykonuje JavaScript.

Utworzona zostaje zmienna a bez przypisania wartości, czyli jej wartość to undefined.

Operator przypisania = przechodzi do ewaluacji wartości po prawej stronie operatora.

Utworzony zostaje obiekt z własnością a, której wartość to undefined.

Destrukturyzując obiekt, przemianowujemy własność obiektu o nazwie a na nazwę b, tworząc tym samym zmienną b.

Wprowadzony zostaje domyślny parametr "foo", który zostaje przypisany jako wartość zmiennej, w przypadku gdy wartość destrukturyzowanej własności obiektu okazałaby się fałszywa.

Z uwagi na to, że obiekt ma kształt { a: undefined }, to rozbijając go na zmienną a, przemianowaną na b, wartość własności a jest fałszywa, zostaje więc użyty parametr domyślny "foo".

Finalnie utworzona zostaje więc zmienna b z wartością "foo".

Zmienna a nie ulega po drodze żadnym modyfikacjom i zachowuje swoją początkową wartość undefined.

🎢 Plac zabaw

Otwórz edytor w nowym oknie

📑 Linki

❤️ Podobają Ci się bugi JS?

Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js