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