← Lekcje
JavaScript · lekcja 04

JavaScript 2/2:
const i podstawowe typy

Dzisiaj:

  1. Stała const - pudełko zaklejone taśmą
  2. Pięć podstawowych typów danych
  3. Operator typeof i konwersja typów
  4. Ćwiczenie przy komputerze: własna stała i sprawdzanie typów
Rozgrzewka · 3 minuty

Rozgrzewka: to, co już wiecie

  1. Czym różni się var od let, gdy spróbujemy zadeklarować tę samą nazwę drugi raz?
  2. Co się stanie, gdy odczytamy zmienną let poza blokiem { }, w którym ją zadeklarowano?
  3. Dlaczego nazwa zmiennej 1age jest niepoprawna?
Część 1 · Stała const

Trzeci sposób: const

Znacie już var i let - oba tworzą pudełko, do którego można włożyć wartość, a potem ją zmienić. const tworzy pudełko zaklejone taśmą: musicie włożyć wartość od razu przy deklaracji, a potem nie da się jej podmienić. Życiowe porównanie: to jak zalanie czegoś żywicą - widać, co jest w środku, ale nie da się tego wyjąć ani wymienić.

const PI = 3.14; PI 3.14 zaklejone taśmą PI = 3; próba zmiany: TypeError Assignment to constant variable. skrypt zatrzymuje się w tym miejscu
MDN: Learn_web_development/Core/Scripting/Variables (sekcja „Constants in JavaScript”)
Część 2 · const czy let?

Kiedy const, kiedy let?

MDN podaje prostą zasadę: używaj const, kiedy możesz, i let, kiedy musisz. Jeżeli wiecie, że wartość się nie zmieni (np. liczba Pi, cena stała, dzisiejsza data z serwera), piszcie const. Jeżeli wartość ma się zmieniać w trakcie działania skryptu (licznik, wynik gry, odpowiedź użytkownika), piszcie let. var od poprzedniej lekcji nie używamy w nowym kodzie w ogóle.

SytuacjaSłowo
Wartość znana od razu i się nie zmieniconst
Wartość będzie się zmieniać (licznik, wynik)let
Nowy kod pisany od poprzedniej lekcjinigdy var
MDN: Variables (sekcja „When to use const and when to use let”): „Use const when you can, and use let when you have to”
Część 3 · Typy danych

Pięć podstawowych typów danych

Każda wartość w JavaScript ma typ. Operator typeof to etykieta, która mówi, jaki typ ma dana wartość - działa jak nalepka na pudełku.

number 17 typeof → "number" string "Ola" typeof → "string" boolean true typeof → "boolean" undefined (puste, brak wartości) typeof → "undefined" null świadomie puste typeof → "object" (wyjątek) undefined = nikt nie przypisał wartości · null = ktoś świadomie wpisał „brak”

Ciekawostka z Wikipedii: typ boolean nazwano na cześć George'a Boole'a, matematyka, który w połowie XIX wieku jako pierwszy opisał algebraiczny system logiki. Stąd „algebra Boole'a” i wartości prawda/fałsz, na których dziś działają wszystkie warunki w kodzie.

MDN: Learn_web_development/Core/Scripting/Variables (sekcja „Variable types”) + Web/JavaScript/Guide/Data_structures (typy Undefined i Null, tabela typeof) · ciekawostka: Wikipedia (en), hasło „Boolean data type” (en.wikipedia.org/wiki/Boolean_data_type)
Część 4 · typeof w akcji

JavaScript sam zgaduje typ

JavaScript jest „dynamicznie typowany”: nie musicie z góry mówić, jakiego typu będzie zmienna - typ zależy od tego, co do niej włożycie. Uwaga: wartość w cudzysłowie zawsze jest tekstem (string), nawet jeśli w środku są same cyfry.

let myNumber = "500";
console.log(typeof myNumber);   // "string" - to tekst, bo w cudzysłowie

myNumber = 500;
console.log(typeof myNumber);   // "number" - teraz to liczba

Ta sama zmienna może w trakcie działania skryptu zmienić typ - JavaScript nic nie sprawdza z góry, w przeciwieństwie do niektórych innych języków.

MDN: Variables (sekcja „Dynamic typing”)
Część 5 · Konwersja typów

Gdy tekst spotyka liczbę

Znak + na tekście i liczbie skleja je w jeden napis. Znak - zawsze liczy, więc zamienia tekst na liczbę, jeśli się da. Gdy zamiana się nie uda, wynikiem jest NaN („Not a Number”) - „zepsuty wynik” działania, które nie ma sensu liczbowego.

"5" + 3 "53" string - sklejenie tekstu "5" - 3 2 number - „5” zamienione na liczbę "pies" - 3 NaN „pies” nie da się zamienić na liczbę
MDN: Variables (sekcja „Dynamic typing”)
Egzamin INF.03

Tak pytają na egzaminie

W JavaScript wynik operacji jest równy wartości NaN, jeśli skrypt próbował wykonać

  1. parseFloat zamiast parseInt na zmiennej liczbowej.
  2. działanie arytmetyczne, a zawartość zmiennej była napisem.
  3. działanie arytmetyczne na dwóch zmiennych liczbowych dodatnich.
  4. funkcję sprawdzającą długość napisu, a zawartość zmiennej była liczbą.
CKE, E.14, czerwiec 2016, zadanie 29 (bank pytań, przedmiot strony, temat javascript)
Ćwiczenie przy komputerze · 20 minut

Ćwiczenie: const i typeof

  1. Otwórz plik script.js z poprzedniej lekcji w edytorze kodu.
  2. Zadeklaruj const PI = 3.14, a w linii niżej spróbuj wykonać PI = 3.14159.
  3. Odśwież page.html, otwórz konsolę (F12 → Console) i zapisz na kartce dokładną treść komunikatu błędu.
  4. Zakomentuj tę linię błędu znakiem //, żeby reszta skryptu znowu działała.
  5. Dopisz trzy zmienne: let studentName = "Ola", let studentAge = 17, let isPresent = true, a pod nimi trzy console.log(typeof ...) - po jednym na zmienną.
  6. Sprawdź w konsoli, że wypisało string, number, boolean. Zapisz plik, żeby wrócić do niego na następnej lekcji.
Na koniec

Sprawdź się

  1. Czym różni się const od let?
  2. Co zwróci typeof dla zmiennej, do której nie przypisano żadnej wartości?
  3. Jaki wynik da działanie "5" - 3, a jaki "5" + 3? Dlaczego są różne?

To koniec tematu zmiennych - na następnej lekcji: operatory w JavaScript.

Poza szkołą

A jak to wygląda w produkcji?

Na lekcjiW produkcjiStatus
Typ sprawdzany dopiero, gdy skrypt się uruchomi (typeof w trakcie działania)TypeScript dopisuje typy do JavaScript i sprawdza je, zanim kod w ogóle się uruchominarzędzia
NaN widoczne dopiero po zobaczeniu wyniku w konsoliEdytor kodu z TypeScript podkreśla błąd typu na czerwono w trakcie pisanianarzędzia
const czy let - decyduje piszący na bieżącoLinter (np. ESLint) wymusza const wszędzie tam, gdzie zmienna się nie zmienianarzędzia
MDN: Variables (sekcja „When to use const and when to use let”)