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

Warunek zapisany w JavaScript jest prawdziwy, gdy zmienna x przechowuje

if (( !isNaN(x) ) && ( x > 0 ))
A. dowolną dodatnią wartość liczbową.
B. dowolną całkowitą wartość liczbową.
C. wartość nie liczbową.
D. pusty napis.

Pytanie z egzaminu CKE, styczeń 2016 (arkusz E.14-X-16.01).

Ten warunek składa się z dwóch sprawdzeń połączonych operatorem logicznym &&, czyli oba muszą być spełnione naraz. Fragment !isNaN(x) oznacza, że wartość x da się potraktować jako liczbę, bo isNaN zwraca true wtedy, gdy coś nie jest liczbą, a wykrzyknik odwraca wynik. Druga część, x > 0, wymaga, żeby ta liczba była większa od zera. W praktyce warunek przejdzie np. dla x = 1, x = 15.7 albo nawet dla tekstu typu x = "8", bo globalna funkcja isNaN w JavaScript wykonuje konwersję typu. Moim zdaniem to jest właśnie pułapka, o której warto pamiętać w formularzach WWW: dane z inputów często przychodzą jako napisy, więc dobrze jest jawnie użyć Number(x), a potem sprawdzić Number.isNaN(wartosc). Branżowo jest to czytelniejsze i bezpieczniejsze, szczególnie przy walidacji ceny, wieku, liczby sztuk czy dodatniego identyfikatora. Istotne jest też, że zero nie spełnia warunku, bo 0 > 0 jest fałszywe. Liczba ujemna też odpada, nawet jeśli oczywiście nadal jest liczbą.
W tym warunku łatwo pomylić samo sprawdzanie, czy coś jest liczbą, ze sprawdzaniem konkretnego zakresu wartości. Zapis !isNaN(x) nie oznacza wartości nieliczbowej, tylko dokładnie odwrotnie: po użyciu operatora negacji ! oczekujemy, że x da się zinterpretować jako liczba. Gdyby x miało np. tekst abc, funkcja isNaN(x) zwróciłaby true, a po negacji dostalibyśmy false, więc cały warunek z operatorem && nie zostałby wykonany. Pusty napis też jest ciekawym przypadkiem, bo w JavaScript globalne isNaN robi konwersję typów i pusty tekst może zostać potraktowany jak 0. Mimo to druga część x > 0 nie przejdzie, bo 0 nie jest większe od zera. To taki typowy haczyk w JS, który w realnych formularzach potrafi narobić bałaganu. Nie wystarczy również powiedzieć, że pasuje dowolna całkowita wartość liczbowa, bo liczby całkowite mogą być ujemne albo równe zero, a warunek wyraźnie wymaga wartości większej od 0. Dodatkowo warunek nie ogranicza się tylko do liczb całkowitych: 2.5 też spełnia x > 0 i jest poprawną dodatnią wartością liczbową. Z mojego doświadczenia najlepiej czytać takie instrukcje krok po kroku: najpierw typ lub możliwość konwersji na liczbę, potem zakres wartości, a dopiero na końcu wynik operatora &&.

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.