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