Przejdź do głównej zawartości

Bug #081

🪲 Znajdź buga

if (false) {
console.log("First")
}

if (Boolean(false)) {
console.log("Second")
}

if (new Boolean(false)) {
console.log("Third")
}

if (!!false) {
console.log("Fourth")
}

Czy któreś z instrukcji warunkowych zostaną wykonane i zalogują swoją wartość do konsoli?

🧪 Rozwiązanie

if (false) {
console.log("First")
}

if (Boolean(false)) {
console.log("Second")
}

if (new Boolean(false)) {
console.log("Third")
}

if (!!false) {
console.log("Fourth")
}

Instrukcja warunkowa if (new Boolean(false)) zostanie wykonana i do konsoli zostanie zalogowana wartość "Third".

Pozostałe instrukcje nie wykonają się.

if (false) powinno być oczywiste. Instrukcja nie wykonuje się, bo przekazany warunek jest fałszywy.

Funkcja Boolean zwraca wartość logiczną true lub false w zależności od przekazanego argumentu i jego ewentualnej konwersji na wartość logiczną, jeśli jest innego typu.

Boolean(false) zwraca wartość false więc tutaj mamy tą samą sytuację co w pierwszej instrukcji.

new Boolean(false) może wydawać się ekwiwalentem Boolean(false), ale użycie słowa kluczowego new powoduje utworzenie nowego obiektu, traktując funkcję Boolean() jako konstruktor obiektu,

new Boolean() zwraca więc obiekt, a nie wartość logiczną.

Obiekty z natury są wartościami prawdziwymi (nie ma znaczenia, że wprowadziliśmy do konstruktora wartość false), więc trzecia instrukcja warunkowa zostaje wykonana.

Czwarta i ostatnia instrukcja nie zostaje wykonana bo podwójny wykrzyknij działa tak samo, jak funkcja Boolean().

Z !false generowana jest wartość przeciwna true, a następnie z !true, wartość przeciwna, czyli false.

🎢 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