Przejdź do głównej zawartości

Bug #091

🪲 Znajdź buga

const objSealed = { value: 11 }
const objFreezed = { value: 11 }

Object.seal(objSealed)
Object.freeze(objFreezed)

objSealed.value = 22
objFreezed.value = 22

objSealed.foo = "bar"
objFreezed.foo = "bar"

delete objSealed.value
delete objFreezed.value

console.log(objSealed)
console.log(objFreezed)

Czy w powyższym przykładzie istniejące własności obiektów mogą zostać usunięte, a nowe własności mogą zostać dodane?

Jakie wartości obiektów zostaną zalogowane do konsoli?

🧪 Rozwiązanie

const objSealed = { value: 11 }
const objFreezed = { value: 11 }

Object.seal(objSealed)
Object.freeze(objFreezed)

objSealed.value = 22
objFreezed.value = 22

objSealed.foo = "bar"
objFreezed.foo = "bar"

delete objSealed.value
delete objFreezed.value

console.log(objSealed) // { value: 22 }
console.log(objFreezed) // { value: 11 }

Obiekty można pieczętować (seal) oraz zamrażać (freeze).

Obie metody działają bardzo podobnie, blokując modyfikacje takie jak usuwanie czy dodawanie własności obiektu.

Obiekt zapieczętowany przez Object.seal() umożliwia jednak modyfikację istniejących własności w przeciwieństwie do obiektu zamrożonego przez Object.freeze().

objSealed zezwala na zaktualizowanie wartości do { value: 22 }.

objFreezed nie umożliwia takiej modyfikacji i zatrzymuje początkową wartość { value: 11 }.

🎢 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