JavaScript dla każdego
//  wróć   główna   dalej  //

Rodzaje zmiennych

var false true null string boolean number object NaN isNaN parseInt parseFloat typeof eval undefined infinity

Na początek kilka słów o definiowaniu zmiennych. Zmienna zdefiniowana w dokumencie, ale nie w funkcji to zmienna globalna. Jest ona w pamięci przez cały czas i można się do niej odwoływać we wszystkich funkcjach. W przypadku zadeklarowania zmiennych w funkcji - zmienne lokalne - o tej samej nazwie, jak zmienna globalna, wszystkie instrukcje tej funkcji odnoszące się do tej zmiennej, będą się odnosiły do zmiennej lokalnej (nastąpi przesłonięcie zmiennej globalnej). Wszystkie jej modyfikacje spowodują zmiany wartości tylko zmiennej lokalnej. Nie można używać zmiennych bez uprzedniego ich zadeklarowania, ale można to zrobić w dowolnym miejscu programu, nawet bezpośrednio przed jej użyciem:

var Zmienna

W taki sposób utworzona została dana o nazwie Zmienna. Jej wartość jest na razie nieokreślona (undefined). W zależności od tego, co podstawiono za wartość zmiennej, to do odpowiedniego typu będzie ona należeć, nie jest to jednak zwykle ważne dla użytkownika.

Drugim rodzajem definiowania danej jest przypisanie jej po prostu wartości, ona zdecyduje jednoznacznie o rodzaju zmiennej. Obydwie formy są poprawne:

Zmienna=123

var Zmienna=123

Bardzo ważną rzeczą w nazewnictwie jest wielkość użytych liter, gdyż język rozróżnia je i można zadeklarować dwie niezależne zmienne alfa i Alfa.

W języku JavaScript można wyróżnić kilka rodzajów zmiennych. W nawiasach są podane ich nazwy oryginalne:

Łańcuch znaków. (string) Jest to dowolny ciąg znaków umieszczany zawsze w cudzysłowu podwójnym lub w pojedynczym:

Zmienna="1 jest_MnieJszE,od+3"

Zmienna string może być także zbudowana ze znaków i innej zmiennej. Wykorzystuje się do tego konkatenację, czyli możliwośćpolączenia dwóch stringów znakiem plusa + (o jego stosowaniu dalej).

Zmienna liczbowa. (number) Czyli zwykła liczba (w szczególnym przypadku cyfra). Miejsca dziesiętne oddziela się kropką. Liczbę można zapisać w jednym z kilku formatów:

Zmienna=51.4 //standardowo w systemie dziesiątkowym,
Zmienna=25e-2 //czyli 25/100

Zmienne logiczne. (boolean) Przyjmują tylko dwie wartości: true (prawda czyli 1) albo false (fałsz czyli 0):

Wszystkie zmienne poza następującymi wyjątkami w instrukcjach warunkowych będą stanowiły prawdę:

  • infinity
  • undefined
  • 0
  • "\0"
  • NaN
  • null

Wartość Null. (object) Jest to bardzo specyficzną wartością (a w rzeczywistości obiektem). Wskazuje na nic, jest specjalną wartością. Dla przykładu w okienkach dialogowych (więcej I>>) po naciśnięciu anuluj zwracana jest wartość null. Podobnie jak w przypadku liczb i wartości logicznych nie należy stosować do jej przypisania cudzysłowu, bo wtedy otrzymamy łańcuch znaków:

Nic=null //a nie Nic="null" ani też Nic=Null

Chcąc sprawdzić do jakiego typu należy dana zmienna można użyć funkcji typeof. Zwróci ona string określający nazwę typu, do jakiego należy dana zmienna lub obiekt:

typeof(Nic) - zwróci wartość object.

Operacje na zmiennych zależą od ich rodzaju. Suma łańcuchów zmiennych string jest zmienną łańcuchową wg podanej zasady:

Zmienna1="Damian"
Zmienna2="Szczepanik"
Zmienna1 + Zmienna2="DamianSzczepanik";

Jak można zauważyć nie sprawdza się przemienność dodawania. Żadna ze zmiennych nie posiadała spacji, suma też jej nie posiada. Podobny efekt będzie, gdy dodamy liczbę i zmienną łańcuchową, liczba zostanie przekonwertowana na łańcuch:

Zmienna="Tekst"+Imie;

Efektem operacji na zmiennych liczbowych jest liczba wynikła z przeprowadzonego działania. Jeżeli chcemy, by liczby były traktowane jako zmienne łańcuchowe, to należy dodać np. między nimi pusty element - łańcuch:

Zmienna=125 + "" + 521 // otrzymamy 125521 zamiast 646

W przypadku innych operacji (mnożenie, dzielenie) na zmiennych łańcuchowych otrzymamy wartość NaN (Not a Number). Taka wartość zostanie zwrócona, bo JavaScript nie mogła zakwalifikować danego wyniku jako liczby.

Jeżeli nie ustalono wartości zmiennej (np przy dzieleniu przez zero), to ma ona wartość infinity. Jeżeli poddamy działaniu zmienne, a efekt nie będzie liczbą, to zmienna będzie wynosić NaN.

Kilka użytecznych funkcji do konwersacji zmiennych z jednego typu na inny. Przy użyciu polecenia typeof() można określić, czy dana zmienna jest liczbą:

isNaN(25) //zwróci wartość czyli jest liczbą,
isNaN(a1) //zwróci wartość true, nie jest liczbą (Not a Number)

Każdy łańcuch znaków, można konwertować do liczby całkowitej przez funkcję pareInt lub zmiennoprzecinkowej przez parseFloat. Jeśli konwersja się nie powiedzie, to zostanie zwrócona wartość NaN. Oto kilka przykładów:

parseInt("5e87")//zwróci wartość 5
parseInt("-21a") //zwróci wartość -21
parseFloat(-2.3) //zwróci wartość -2.3
parseFloat("-12.1+5") //zwróci wartość -12.1
parseFloat(-12.1+5) //zwróci wartość -7.1

W drugim przykładzie zwrócona wartość wynosi -21, chociaż argument nie jest liczbą, ale jego pierwsze 3 znaki są kwalifikowane jako liczba i te zostały odczytane. Różnica między dwoma ostatnimi przykładami wynika stąd, że pierwszy z nich jest traktowany jako string a znak plusa nie jest liczbą, w drugim przypadku są to liczby, dlatego zostaną przed konwersją dodane.

Jeszcze jedna bardzo przydatna instrukcja. Dokonuje operacji na argumencie będącym łańcuchem znaków i zwraca liczbę. Jest pomocna, gdy wywołujemy funkcję z wartością jako string, a należy wykonać na niej działanie, oto przykład zastosowania:

Zmienna1="10+2*4"

Zmienna2=eval(Zmienna1) - zmienna będzie wynosiła 18, będzie zmienną typu number.

Zobacz przykład

W bardziej skomplikowanych wyrażeniach należy pamiętać o kolejności i sile operatorów tzw priorytety. W języku JS nie określa się kolejności wykonywania operatorów, dlatego wyrażenie:

y=x++ * (x*=2)

może dać różne wyniki. W pierwszej kolejności zmienna x może być zwiększona a potem pomnożona przez dwa lub też kolejność będzie odwrotna. Takich niejednoznaczności należy się wystrzegać, bo w zależności od implementacji mogą dawać różne wyniki. Analogiczny problem jest w instrukcji:

a=F() + G()

jeśli obie funkcje modyfikują tę samą zmienną, nie jest określone, która funkcja wywołana zostanie jako pierwsza, a tym samym kolejność modyfikacji wspólnej zmiennej nie jest określona, co może prowadzić do różnych wyników.


Do góry