2.1 Zmienne w JavaScript
JavaScript to elastyczny i dynamiczny język programowania, który wspiera różne sposoby deklaracji zmiennych i pracy z typami danych. W tym wykładzie przyjrzymy się trzem kluczowym sposobom deklaracji zmiennych (var, let, const) oraz podstawowym typom danych w JavaScript.
Zmienne w JavaScript
JavaScript to język z dynamicznym typowaniem. Zmienne w nim nie mają z góry określonego typu. Każdej zmiennej można przypisać dowolną wartość w dowolnym momencie (ale są pewne detale).
Aby stworzyć zmienną, trzeba napisać coś w tym stylu:
var name;
Zmienna może od razu mieć przypisaną wartość:
var name = value;
Ale w rzeczywistości w JavaScript są aż trzy sposoby tworzenia zmiennych. Przyjrzyjmy się im teraz bliżej.
Operator var
Zmienne zadeklarowane za pomocą var mają funkcjonalny lub globalny zasięg. Podlegają mechanizmowi "hoisting", co oznacza, że ich deklaracja jest przenoszona na początek swojego zasięgu podczas wykonywania kodu.
Przykład:
console.log(x); // undefined
var x = 10;
console.log(x); // 10
W tym przykładzie zmienna x jest przenoszona na początek swojego zasięgu, dlatego pierwszy console.log wyświetla undefined.
Innymi słowy, "hoisting" zamienia nasz kod na ten:
var x;
console.log(x); // undefined
x = 10;
console.log(x); // 10
Operator let
Programistom bardzo zależało na zmianie zachowania operatora var, ale bali się złamać miliony już napisanych linii kodu. Dlatego wymyślili kolejny operator, który również tworzy zmienne, ale z nieco innym zachowaniem.
Zmienne zadeklarowane za pomocą let mają zasięg blokowy. Oznacza to, że są dostępne tylko w obrębie bloku kodu (zwykle w nawiasach klamrowych {}), w którym zostały zadeklarowane. let nie podlega "hoistingowi" w taki sam sposób jak var.
Przykład:
Zmienna y istnieje tylko w ramach bloku if.
if (true) {
let y = 20;
console.log(y); // 20
}
console.log(y); // ReferenceError: y is not defined
Operator const
Zmienne zadeklarowane za pomocą const również mają zasięg blokowy i nie mogą być ponownie przypisane po ich inicjalizacji. Jednakże to nie czyni obiektów zadeklarowanych przez const niezmiennymi — ich właściwości można zmieniać.
To znaczy, że zmiennej nie można zmienić, ale obiekt, na który się odnosi — można. Chcieli jak najlepiej, a wyszło jak zwykle.
Przykład:
W tym przykładzie konstanta x nie może być ponownie przypisana, ale obiekt obj może być zmieniany.
const x = 30;
console.log(x); // 30
x = 40; // TypeError: Assignment to constant variable.
const obj = { name: 'Alice' };
obj.name = 'Bob'; // To jest dozwolone
console.log(obj.name); // Bob
2.2 Primitives Typy danych
JavaScript obsługuje kilka prymitywnych typów danych, które reprezentują proste wartości, nie będące złożonymi obiektami.
Typ Number
Reprezentuje wszystkie numeryczne wartości, w tym liczby całkowite i liczby zmiennoprzecinkowe.
Przykłady:
let num = 42;
let pi = 3.14;
Typ String
Reprezentuje dane tekstowe: ciągi znaków, symbole, emoji. Wszystko, co wygląda na ciąg — to tutaj.
Przykłady:
let greeting = "Hello, world!";
let facepalm = "🤦";
let char = 'x';
Typ Boolean
Reprezentuje wartości logiczne true lub false.
let isTrue = true;
let isFalse = false;
Typ Null
Reprezentuje zamierzone brak wartości.
let empty = null;
Jeśli typ składa się z jednej wartości, która oznacza brak wartości, to może on jest bardziej unikalną wartością niż unikalnym typem?
Typ Undefined
Reprezentuje wartość zmiennej, która została zadeklarowana, ale nie zainicjalizowana.
let notAssigned;
console.log(notAssigned); // undefined
2.3 Porównanie var, let, i const
Na koniec porównajmy nasze trzy sposoby tworzenia zmiennych jeszcze raz:
| Cecha | var | let | const |
|---|---|---|---|
| Zasięg | Funkcjonalny lub globalny | Blokowy | Blokowy |
| Hoisting | Tak, ale inicjalizacja nie jest przenoszona | Nie | Nie |
| Ponowne przypisanie | Tak | Tak | Nie |
| Inicjalizacja | Opcjonalna | Opcjonalna | Wymagana |
JavaScript oferuje kilka sposobów deklaracji zmiennych, z których każdy ma swoje cechy i zastosowanie w zależności od kontekstu. var jest rzadziej używane z powodu swoich cech związanych z "hoistingiem" i globalnym zasięgiem. let i const są preferowane w nowoczesnym JavaScript z powodu ich blokowego zasięgu i kontroli nad ponownym przypisaniem.
Prymitywne typy danych pozwalają na pracę z podstawowymi strukturami danych, zapewniając podstawową funkcjonalność, niezbędną do tworzenia złożonych aplikacji. I to jest najpopularniejszy język na świecie :)
GO TO FULL VERSION