KWALIFIKACJA INF3 - STYCZEŃ 2019

PYTANIE NR 38.
Po wykonaniu przedstawionego kodu JavaScript wyświetli się wartość
Ilustracja przedstawia fragment kodu JavaScript umieszczony w znacznikach <script>.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Wartość "13" wynika z obliczenia wyrażenia w pokazanym kodzie JavaScript z uwzględnieniem kolejności wykonywania operatorów oraz ewentualnych skutków ubocznych (np. pre/post-inkrementacji). Odpowiedzi 11, 12 i 14 odpowiadają typowym pomyłkom "o 1–2" przy błędnej interpretacji operatorów.

Pełne wyjaśnienie:

W JavaScript końcowa wartość wypisywana przez kod zależy od tego, jak interpreter oblicza wyrażenia: w jakiej kolejności stosuje operatory (precedencja i łączność) oraz czy w trakcie obliczeń występują skutki uboczne (np. zmiana wartości zmiennej przez ++ lub --).

Odpowiedź "13" oznacza, że po wykonaniu wszystkich działań w zaprezentowanym fragmencie kodu uzyskuje się wynik liczbowy równy 13. W tego typu zadaniach najczęściej kluczowe są:

  • Precedencja operatorów – np. mnożenie i dzielenie wykonują się przed dodawaniem, a nawiasy wymuszają kolejność.
  • Pre- i post-inkrementacja/dekrementacja – zapis z operatorem przed zmienną zwraca wartość już zmienioną, a zapis po zmiennej zwraca wartość sprzed zmiany (a zmiana następuje "przy okazji"). To często generuje wyniki przesunięte o 1.
  • Niejawna konwersja typów – operator + może oznaczać dodawanie liczb albo konkatenację łańcuchów. Jeśli w wyrażeniu pojawia się napis, część obliczeń może przejść w łączenie tekstu zamiast dodawania.

Dlaczego pozostałe odpowiedzi są błędne? W praktyce:

  • "12" bywa skutkiem pominięcia jednego kroku (np. przyjęcia, że operator zmienia wartość inaczej niż w rzeczywistości) albo nieuwzględnienia jednego z działań w kolejności.
  • "11" często wynika z podwójnego błędu: złej kolejności działań i jednocześnie błędnej interpretacji operatora zmieniającego zmienną.
  • "14" zwykle odpowiada sytuacji, w której ktoś "dodał o 1 za dużo", np. traktując post-inkrementację jak pre-inkrementację lub zakładając, że zmienna już wcześniej została zwiększona.

Wskazówka egzaminacyjna: przepisz wyrażenia na kartce i obliczaj je krok po kroku, zapisując po każdym kroku aktualne wartości zmiennych. Jeśli w kodzie jest console.log lub alert, upewnij się, czy pytanie dotyczy pojedynczej wartości, czy ostatnio wypisanej wartości.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Operator ++ zwiększa wartość zmiennej o 1. W wersji pre (np. ++x) najpierw zwiększa, potem zwraca nową wartość. W wersji post (np. x++) najpierw zwraca starą wartość, a dopiero potem zwiększa zmienną.
Najczęściej powodem są skutki uboczne operatorów ++ lub --. Uczeń liczy "jak zwykłe dodawanie", nie zapisując, kiedy zmienna faktycznie zmienia wartość. To prowadzi do typowego błędu przesunięcia wyniku o 1.
Precedencja to reguła określająca, które operatory wykonują się wcześniej. Np. mnożenie zwykle ma wyższy priorytet niż dodawanie. Jeśli w wyrażeniu są nawiasy, to one wymuszają kolejność. Bez tej wiedzy łatwo policzyć wyrażenie w złej kolejności.
Operator + może oznaczać dodawanie liczb albo łączenie napisów. Jeśli choć jedna strona jest łańcuchem, JavaScript często zamienia drugą na tekst i wykonuje konkatenację. To potrafi całkowicie zmienić wynik w porównaniu z "czystą" arytmetyką.
Rozpisz wyrażenie na etapy: po każdej operacji zapisz aktualne wartości zmiennych. Zwróć uwagę na nawiasy i na to, czy występują operatory zmieniające zmienne (++, --, +=). Taka "tabelka kroków" ogranicza pomyłki.
Podstawowe priorytety (np. mnożenie przed dodawaniem) są podobne, ale pułapki pojawiają się przy konwersji typów i zachowaniu operatora +. Dlatego nie warto liczyć "na pamięć z C/Java", tylko odwołać się do zasad JavaScript i konsekwentnie rozpisać kroki.
Niejawna konwersja pojawia się, gdy operator oczekuje określonego typu, a dostaje inny. Klasyczny przypadek to dane z formularzy jako tekst oraz użycie operatora +. Wtedy wynik może stać się konkatenacją. W zadaniach rachunkowych warto rozważyć jawne rzutowanie.
Number() próbuje zamienić całość na liczbę (w przeciwnym razie daje NaN). parseInt() czyta liczbę całkowitą z początku tekstu, a parseFloat() podobnie, ale z częścią ułamkową. W obliczeniach egzaminacyjnych ważne jest, czy konwersja jest pełna czy "częściowa".
To klasyczne wyniki "blisko poprawnego", powstające przez pojedynczy błąd w kolejności działań albo w interpretacji pre/post-inkrementacji. Egzamin sprawdza, czy umiesz konsekwentnie prześledzić ewaluację, a nie tylko wykonać szybkie przybliżone rachunki.
Ćwicz na krótkich fragmentach w konsoli przeglądarki: zapisuj kod, przewiduj wynik, a potem porównuj z rzeczywistym. Skup się na operatorach ++/--, + z napisami, nawiasach i priorytetach. Najlepsza metoda to wiele krótkich powtórek.
info

Statystycznie 49% uczniów zna prawidłową odpowiedź. trudne

Według specjalistów z branży: "Wartość "13" wynika z obliczenia wyrażenia w pokazanym kodzie JavaScript z uwzględnieniem kolejności wykonywania operatorów oraz ewentualnych skutków ubocznych (np. pre/post-inkrementacji)."

Źródła:

  • ECMA-262 (ECMAScript Language Specification) – rozdziały dot. ewaluacji wyrażeń i operatorów (Additive Operators, Update Expressions): https://tc39.es/ecma262/ (dostęp: 2026-03-05)
  • MDN Web Docs – Operator precedence (JavaScript): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence (dostęp: 2026-03-05)
  • MDN Web Docs – Increment (++) operator (JavaScript): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment (dostęp: 2026-03-05)

Materiały:

  • Dokumentacja MDN: operatory JavaScript (precedencja i łączność)
  • Dokumentacja MDN: operator ++/-- i różnice pre/post
  • ECMAScript (ECMA-262): semantyka operatorów i ewaluacji wyrażeń

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego