Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki JavaScript

Słowa kluczowe: JavaScript NaN w JavaScript Operator typeof w JavaScript parseInt() w JavaScript

W formularzu dane z pola input o typie number zostały zapisane do zmiennej a, a następnie przetworzone w skrypcie JavaScript w następujący sposób

var x = parseInt(a);
Zmienna x będzie typu
A. NaN
B. liczbowego, całkowitego.
C. napisowego.
D. zmiennoprzecinkowego.

Pytanie z egzaminu CKE, październik 2016 (arkusz E.14-X-16.08).

W tym fragmencie kluczowe jest działanie funkcji parseInt(a). Dane pobrane z pola input typu number bardzo często trafiają do JavaScriptu jako tekst, jeśli korzystamy z właściwości value, mimo że użytkownik wpisuje liczbę. Funkcja parseInt próbuje odczytać z tego tekstu liczbę całkowitą i zwraca wartość typu number, czyli liczbowego. W praktyce wynik jest traktowany jako liczba całkowita, np. parseInt('123') da 123, a parseInt('12.75') da 12, bo część po kropce zostaje ucięta, a nie zaokrąglona. Warto pamiętać, że w samym JavaScripcie technicznie istnieje typ Number, a nie osobny typ int jak w C++ czy Javie, ale w szkolnym ujęciu odpowiedź „liczbowego, całkowitego” jest tu właściwa. Moim zdaniem warto od razu wyrabiać sobie dobry nawyk pisania parseInt(a, 10), żeby jasno wskazać system dziesiętny. W realnych formularzach trzeba też sprawdzać, czy wynik nie jest NaN, bo puste albo błędne dane nie dadzą sensownej liczby.
Najczęstsza pułapka w tym pytaniu polega na pomieszaniu typu danych pobranych z formularza z typem danych po przetworzeniu. Samo pole input typu number nie oznacza jeszcze, że w zmiennej a zawsze siedzi gotowa liczba. Gdy odczytujemy wartość przez value, przeglądarka przekazuje ją zwykle jako napis, czyli string. Dopiero funkcja parseInt wykonuje konwersję i zwraca wynik liczbowy. Dlatego uznanie, że x pozostanie typu napisowego, byłoby nietrafione, bo po wywołaniu parseInt nie operujemy już na tekście, tylko na wartości typu number. NaN też nie jest osobnym typem zmiennej w sensie takim, jak string czy number. To specjalna wartość oznaczająca Not a Number, która może się pojawić, gdy konwersja się nie uda, na przykład parseInt('abc') da NaN. Co ciekawe, typeof NaN w JavaScripcie zwraca number, co na początku wygląda trochę dziwnie, ale tak działa standard ECMAScript. Odpowiedź o typie zmiennoprzecinkowym też może kusić, bo JavaScript przechowuje liczby jako Number, najczęściej w formacie zmiennoprzecinkowym IEEE 754. Jednak parseInt z założenia odczytuje część całkowitą, więc z punktu widzenia zadania wynik jest liczbą całkowitą. Jeśli potrzebna jest liczba z częścią ułamkową, stosuje się raczej parseFloat albo Number, zależnie od sytuacji. Z mojego doświadczenia, najbezpieczniej po takiej konwersji zawsze zrobić walidację, np. sprawdzić Number.isNaN(x), bo formularze lubią przyjmować dane inne niż zakładaliśmy.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.