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
- Object initializer - JavaScript | MDN
- Default parameters - JavaScript | MDN
- Assignment (=) - JavaScript | MDN
- Destructuring assignment - JavaScript | MDN
❤️ Podobają Ci się bugi JS?
Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js