Typ zmiennej w języku JavaScript
A. następuje poprzez przypisanie wartości.
B. nie występuje.
C. jest tylko jeden.
D. musi być zadeklarowany na początku skryptu.
Pytanie z egzaminu CKE, czerwiec 2014 (arkusz E.14-X-14.05).
W JavaScript typ jest ustalany dynamicznie, czyli w praktyce wynika z wartości przypisanej do zmiennej. To ważne rozróżnienie: sama zmienna zadeklarowana przez let, const albo var nie ma na stałe wpisanego typu tak jak np. w Javie czy C#. Typ ma aktualnie przechowywana wartość. Przykład: let wynik = 10; oznacza, że wartość ma typ number, a po instrukcji wynik = 'brak danych'; zmienna wskazuje już na wartość typu string. Można to sprawdzić operatorem typeof, np. typeof wynik zwróci 'string' albo 'number', zależnie od aktualnego przypisania. Z mojego doświadczenia to jedna z rzeczy, która na początku trochę miesza, ale potem bardzo pomaga przy szybkim pisaniu kodu do stron WWW. Dobra praktyka jest taka, żeby mimo dynamicznego typowania nie zmieniać bez potrzeby znaczenia zmiennej, np. nie trzymać raz ceny, a raz komunikatu tekstowego w tej samej nazwie. Czytelny kod JavaScript powinien używać let i const zamiast starego var, nadawać zmiennym konkretne nazwy oraz kontrolować typy danych przy pracy z formularzami, bo wartości z inputów bardzo często przychodzą jako tekst, nawet jeśli użytkownik wpisał liczbę.
W JavaScript nie działa zasada, że typ zmiennej w ogóle nie istnieje. Istnieją typy danych, takie jak number, string, boolean, undefined, null, symbol, bigint oraz object, tylko są one powiązane z wartościami, a nie sztywno z deklaracją zmiennej. Typowy błąd myślowy polega na tym, że skoro przy deklaracji piszemy let suma; bez dopisku typu, to ktoś uznaje, że typów nie ma. One są, ale silnik JavaScript ustala je w czasie działania programu. Równie mylące jest stwierdzenie, że jest tylko jeden typ. Gdyby tak było, operacje takie jak dodawanie liczb, sklejanie tekstów, sprawdzanie true/false czy praca na obiektach nie miałyby sensownego rozróżnienia. W praktyce właśnie różnice typów powodują czasem niespodzianki, np. '5' + 2 daje tekst '52', a nie liczbę 7. Moim zdaniem to klasyczny przykład, gdzie warto używać console.log i typeof, bo wtedy od razu widać, z czym program ma do czynienia. Nie jest też prawdą, że typ musi być zadeklarowany na początku skryptu. JavaScript nie wymaga zapisu w stylu int liczba albo string nazwa. Deklarujemy zmienną przez let, const lub var, a jej typ wynika z przypisanej wartości. W nowoczesnym kodzie branżowo zaleca się let i const, ograniczanie zakresu zmiennych oraz unikanie przypadkowego mieszania typów, bo potem debugowanie robi się nieprzyjemne, tak po prostu.