Jest coś takiego w JavaScript, co się zowie jak powyżej. Niestety, bardzo często jest to temat niezrozumiały. Miałem okazję uczestniczyć bądź po prostu układać pytania do kilku rekrutacji na JavaScript developera w dużych firmach i muszę stwierdzić, że czasem bywa wręcz z falsy values dramatycznie.
O co takiego chodzi? Falsy values1 to nic innego, jak zbiór wartości, które dają fałsz. Coś w ten deseń:
if (!value) {
console.log('Jedną z falsy values jest: '+ value);
}
Pytanie, jakie są to wartości? Oto one:
- “” – pusta zmienna typu String
- 0 – typu Number
- false typu Boolean
- undefined
- null
- NaN typu Number
Czyli:
if (!NaN) {
console.log('Jedną z falsy values jest: '+ NaN);
}
if (!null) {
console.log('Jedną z falsy values jest: '+ null);
}
Wszystkie te wartości przy konwertowaniu na typ Boolean (np. !!NaN) dają false. Warto zapamiętać!
Operatory porównania w JavaScript
Jeśli mowa o falsy values ciekawe rzeczy dzieją się przy ich porównywaniu. Jak wiadomo, mamy operatory == i ===. Mnóstwo ludzi wykłada się na tym, banalnym zresztą (po głębszej analizie) problemie.
Warto zapamiętać, że pierwszy operator porównuje jedynie wartości, drugi – wartości oraz typy. Poniższe przykłady dają więc prawdę:
"0" == 0
" " == 0
[] == 0
undefined == null
false == new String("")
Fałsz zwracają natomiast podobne konstrukcje:
NaN == 0
null == 0
undefined == ""
0 == {}
Kiedy idzie o operator ścisłego porównania robi się ciekawiej – JavaScript oprócz logicznej wartości porównuje również typy zmiennych (a więc czy są obiektem, stringiem, liczbą itd.). Prawdę zwracają:
0 === 0
"" === ""
[] !== [] // dla kontrastu..
Fałsz natomiast poniższe przykłady:
"" === 0 // typ string i number
0 === null // typ number i object
[] === 0 // typ object i number
[] === " " // typ object i string
Warto więc być ostrożnym w trakcie pisania aplikacji w JavaScript.
- Temat falsy values poruszył na przykład Douglas Crockford w swojej znakomitej książce “JavaScript: The Good Parts”. Polecam!
Komentarze