Zastanawia mnie pewna rzecz. Po pierwsze rzućmy okiem na następujący kod.
if(" ")
{
console.log("1 warunek wszedł");
}
else
{
console.log("1 warunek nie wszedł")
}
Efekt takiego kodu w konsoli to: 1 warunek wszedł. Wniosek z tego taki, że " " czyli spacja została zamieniona na true. Czyli jak wyczytałem w książce mamy tu do czynienia z tzw. "niejawną koercją" - zamiana typu wartości. Na razie nic nadzwyczajnego. Ale spójrzmy na ten kod:
if(true == " ")
{
console.log("2 warunek wszedł");
}
else
{
console.log("2 warunek nie wszedł");
}
Jak się okazuje efektem wykonania takiego kodu jest : "2 warunek nie wszedł"
Wydaje się to być dziwne. Wcześniej spacja została zamieniona na true. Na chłopski rozum skoro wcześniej spacja została zamieniona na true to w tym wypadku też powinno tak być. Spacja zostałaby zamieniona na true i wtedy true równa się true i warunek zostaje spełniony. No ale tak się nie dzieje. Pytanie dlaczego. Dlaczego raz traktuje spację jako true a raz nie? A może zamienia true na "true" ? Jeżeli tak to jakie reguły rządzą wyborem wartości do koercji? Kto nie wierz niech sprawdzi.
https://codepen.io/anon/pen/rpLwrO?editors=1112