Bug #033
🪲 Znajdź buga
console.log(!"")
console.log(!" ")
console.log(!!"")
console.log(!!" ")
console.log(Boolean(""))
console.log(Boolean(" "))
Jakie wartości zostaną zalogowane do konsoli?
🧪 Rozwiązanie
console.log(!"") // true
console.log(!" ") // false
console.log(!!"") // false
console.log(!!" ") // true
console.log(Boolean("")) // false
console.log(Boolean(" ")) // true
Operator negacji (logiczne NIE !
), odwraca prawdziwość/fałszywość i konwertuje ją do wartości logicznej.
Dl wartości !true
zostanie zwrócona więc odwrotność, czyli false
, a dla !false
, true
.
W przypadku gdy operator !
zostaje użyty z wartością inną niż logiczna (boolean), wtedy pod uwagę brana jest prawdziwość (truthy) lub fałszywość (falsy) operandu i zwracana jest jego odwrotność w postaci logicznej (false
lub true
).
Pusty ciąg znaków ""
w JavaScript jest wartością fałszywą, więc jej zanegowanie da nam wartość logiczną true
, a podwójne zanegowanie wartość false
.
Użycie podwójnego operatora negacji (!!
) jest równoznaczne z użyciem konstruktora (Boolean
), czyli konwersją wartości prawdziwych/fałszywych na logiczne true/false
.
Gdy jednak ciąg znaków nie jest pusty i zawiera choćby biały znak " "
jest już wtedy interpretowany jako wartość prawdziwa, więc negacja takiej wartości da nam false
.
Sytuacja z pustym ciągiem znaków i ciągiem znaków składającym się z białych znaków może być myląca, szczególnie gdy porównamy to z działaniem konstruktora Number
, ale to już jest temat na innego buga...
Rozwiązaniem problematyczności tych zjawisk jest tylko i wyłącznie zapamiętanie w jaki sposób JavaScript interpretuje kod.
Mocno wskazane jest też testowanie kodu przed wdrożeniem go na produkcję.
🎢 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