W formularzu wartość z pola input o typie number jest odczytywana w skrypcie JavaScript w poniższy sposób. Jakiego typu będzie zmienna a?
var a = document.getElementById('ile').value;
A. NaN
B. liczbowego, całkowitego
C. napisowego
D. logicznego
Poprawna odpowiedź to napisowego. Właściwość .value elementu formularza w DOM zwraca wartość pola jako ciąg znaków, czyli typ string, nawet wtedy, gdy w HTML pole ma type="number". Atrybut type="number" wpływa głównie na sposób wprowadzania danych w przeglądarce, walidację i interfejs użytkownika, ale samo odczytanie przez .value nie wykonuje automatycznej konwersji na liczbę. Jeśli użytkownik wpisze 25, zmienna a będzie miała wartość "25", a nie liczbę 25. Do obliczeń trzeba użyć konwersji, np. Number(a), parseInt(a, 10), parseFloat(a) albo właściwości valueAsNumber. Typowa pułapka polega na dodawaniu wartości z pól formularza: "2" + "3" daje "23", a nie 5.
W tym fragmencie najważniejsza jest właściwość .value, a nie sam atrybut type="number" w HTML. Poprawna odpowiedź to napisowego, ponieważ odczyt przez .value zwraca tekst wpisany w polu formularza jako string. Odpowiedź liczbowego, całkowitego byłaby trafna dopiero po jawnej konwersji, na przykład przez parseInt(a, 10), albo przy użyciu valueAsNumber, jeśli przeglądarka może odczytać poprawną liczbę. Sam JavaScript nie zamienia automatycznie wyniku .value na typ liczbowy. NaN nie oznacza typu pola formularza; jest to specjalna wartość typu number, pojawiająca się zwykle po nieudanej konwersji, na przykład Number("abc"). Odpowiedź logicznego dotyczy wartości true albo false, typowych dla porównań, warunków lub właściwości checked w polach wyboru, a nie dla .value zwykłego pola input. Typowy błąd myślowy polega na utożsamieniu typu kontrolki HTML z typem danych otrzymywanym w skrypcie JavaScript.