JavaScript/Zmienne i typy zmiennych

Z Wikibooks, biblioteki wolnych podręczników.

Spis treści

[edytuj] Typy danych w Javascripcie

Javascript należy do języków programowania które są dynamicznie typowane, oraz słabo typowane.

Porada Dynamicznie typowany język programowania to taki, w którym dynamicznie możemy nadawać typy zmiennym, podczas wykonywania programu.
Porada Słabo typowany język programowania to taki, w którym konwersje na różne typy danych są wykonywane automatycznie. Na przykład
 alert("hello " + 12 + " world");
spowoduje wyświetlenie "hello 12 world" pomimo, że nie zmieniliśmy liczby 12 w łańcuch znaków.

[edytuj] Deklaracja zmiennych

Do deklaracji zmiennych możesz posłużyć się słowem kluczowym "var":

var a;

W ten sposób utworzyliśmy zmienną, jednakże nie została ona zainicjalizowana żadnym typem.

var a=12;

Utworzyliśmy teraz zmienną i posiada ona typ zgodny z naszym przypisaniem, czyli w tym przypadku typem jest liczba.

Możemy także bez deklaracji zmiennej ją inicjalizować:

a=12;

W powyższym zapisie interpreter JavaScriptu domniemywa, że zadeklarowaliśmy zmienną a.

[edytuj] Sprawdzanie typów danych

Zanim przystąpimy do omawiania typów danych w JavaScripcie przedstawimy prosty sposób odczytywania typu poszczególnych zmiennych. Do odczytania typu zmiennej służy operator typeof().

alert(typeof(12));

Powyższy przykład powinien nam wyświetlić "Number". Oznacza to, że 12 jest typem liczby.

[edytuj] Typy proste

Do typów prostych należą: Boolean, Number, String, Null oraz Undefined.

[edytuj] Typ Boolean

Typ boolean może przyjmować dwie wartości: true albo false. Przykłady deklaracji:

var prawda=true;
var falsz=false;

[edytuj] Typ Number

Typ Number jest unikatowym zjawiskiem w językach programowania. Może zarówno przechowywać liczbę całkowitą, jak i liczbę zmiennoprzecinkową.

[edytuj] Liczby całkowite

Deklaracja zmiennej typu Number odbywa się poprzez przyporządkowanie liczby do zmiennej:

var liczba = 1;

Liczby całkowite mogą być wyrażane w ósemkowym oraz w szesnastkowym systemie liczbowym.

var liczba8  = 035; //ósemkowo zapisana liczba 035 odpowiada liczbie 29 w systemie dziesiętnym
var liczba16 = 0xff;//szesnastkowo zapisana liczba 0xff odpowiada liczbie 255 w systemie dziesiętnym
var LICZBA16 = 0xC3;//szesnastkowo zapisana liczba 0xC3 odpowiada liczbie 195 w systemie dziesiętnym
Porada Wyniki przeprowadzanych działań i operacji na liczbach zwracane są w dziesiętnym systemie liczbowym.

[edytuj] Liczby zmiennoprzecinkowe

Liczby typu zmiennoprzecinkowego deklaruje się poprzez przyporządkowanie liczby rzeczywistej do zmiennej:

var liczba_rzeczywista=12.0;

W przypadku bardzo dużych, jak i bardzo małych liczb, można skorzystać z postaci wykładniczej:

var notacja_naukowa = 12.333e12;//12.333e6 = 12.333*10^6 = 12333000
var notacja_naukowa_mala = 7e-2;//7e-2=0.07

Zmiennoprzecinkowy typ Number przechowywany jest w 64-bitowym formacie IEEE 754 co oznacza, że maksymalnie liczby zapisane w tym formacie mogą posiadać około 16 miejsc po przecinku, w przypadku przekroczeniu tejże wartości, liczba jest zaokrąglana do minimalnej dopuszczalnej wartości.

[edytuj] Wartości nieliczbowe

Typ Number oferuje nam dodatkowo typy nieliczbowe, związane z zakresami i wartościami liczb. Operacje i działania na liczbach nie mogą przekroczyć przedziału (Number.MIN_VALUE, NUMBER.MAX_VALUE) gdzie Number.MIN_VALUE to minimalna dopuszczalna wartość Number.MAX_VALUE to maksymalna dopuszczalna wartość. Jeżeli wynik obliczeń przekroczy przedział, nadawana mu jest wartość Number.POSITIVE_INFINITY, w przypadku przekroczenia maksimum lub Number.NEGATIVE_INFINITY, w przypadku przekroczenia minimum, nie są to wartości liczbowe, a literały odpowiednio: Inifinity oraz -Infinity. By sprawdzić czy dane działania na liczbach nie przekroczyły dopuszczalnego zakresu przydaje się metoda isFinite(), która to zwraca typ Boolean: true w przypadku gdy nie wyszliśmy poza dopuszczalny zakres oraz false gdy go przekroczyliśmy

Ostatnim literałem nieliczbowym oferowanym przez typ Number to NaN, co symbolizuje, że dana wartość zmiennej nie jest liczbą. Zazwyczaj typ Number przyjmuje wartość NaN w przypadku złej konwersji z innego typu na typ Number. By sprawdzić czy mamy do czynienia z NaN korzystamy z metody isNan(), która zwraca typ Boolean: true w przypadku gdy mamy doczynienia z wartością NaN, oraz false, gdy mamy do czynienia z wartością liczbową.

Porada Przedstawione tutaj nieliczbowe literały, które może przyjmować typ Number, nie należy stosować do dalszych obliczeń, ponieważ może to przynieść nieoczekiwanych efekt, w przypadku istnienia ryzyka, że zachodzi możliwość przyjęcia wartości nieliczbowej przez typ Number, należy skorzystać z przedstawionych funkcji isFinite(), oraz isNaN().


[edytuj] Typ String

String to typ zmiennej, w której przechowywane są ciągi znaków. Definiowanie ciągu znakowych następuje poprzez umieszczenie go w cudzysłowie " :

var zdanie="Ala ma kota.";

lub też w apostrofie ' :

var dlugi_wyraz='Konstantynopolitańczykowianeczka';
Porada JavaScript nie posiada odpowiednika typu char znanego z innych języków programowania, dlatego też w przypadku wprowadzania ciągów znakowych można się posługiwać parami cudzysłowów i apostrofów zamiennie.
Porada Proszę się ustrzegać typowych błędów
  • var slowa="witaj świecie';
    

źle zamknięty cudzysłów!

  • var slowa2='witaj świecie";
    

źle zamknięty apostrof!

Typ String jest zaopatrzony w znaki specjalne służące do formatowania tekstu.

Porada Porównaj z C
  • \b - backspace (usuwa poprzedzający znak)
  • \f - wysuniecie strony
  • \n - nowy wiersz
  • \r - powrót do początku wiersza
  • \t - tabulator poziomy
  • \" - cudzysłów (przydatne, jeśli łańcuchy znaków wprowadzamy za pomocą cudzysłowów i chcemy wyświetlić ten znak)
  • \' - apostrof (przydatne, jeśli łańcuchy znaków wprowadzamy za pomocą apostrofów i chcemy wyświetlić ten znak)
  • \\ - ukośnik wsteczny (backslash)
  • \0ooo - znak napisany za pomocą liczby w systemie ósemkowym, gdzie 'ooo' należy zastąpić trzycyfrową liczbą ósemkową.
  • \xhh - znak napisany za pomocą liczby w systemie szesnastkowym, gdzie 'hh' należy zastąpić dwucyfrową liczbą szesnastkową.
  • \unnnn - uniwersalna nazwa znaku, gdzie 'nnnn' należy zastąpić czterocyfrowym identyfikatorem znaku w systemie szesnatkowym.

[edytuj] Pozostałe typy

Przedstawione niżej typy, nie są zmiennymi JavaScriptu, a jedynie własnościami obiektu globalnego.

Porada Obiekty typu function oraz typy referencyjne zostaną omówione w dalszej części książki

[edytuj] Typ Undefined

Typ Undefined to inaczej typ nieokreślony. Posiada jedną wartość w formie literału : undefined. Typ ten jest automatycznie nadawany podczas deklarowania zmiennych. Można to łatwo sprawdzić:

var zmienna;
alert(typeof(zmienna)); //wyświetla undefined

Jeśli chcemy przypisać wartość wyniku działania funkcji do zmiennej, a dana funkcja nie zwraca żadnej wartości, to nastąpi zwrócenie wartości undefined, tak jak w poniższym przykładzie:

function funkcja(){};
var wartosc_funkcji=0;
alert(typeof wartosc_funkcji); //wyświetla number
wartosc_funkcji=funkcja();
alert(typeof wartosc_funkcji); //wyświetla undefined

[edytuj] Typ Null

Typ Null to inaczej typ pusty. Posiada jedną wartość w formie literału : null. Typ ten jest zwracany przez funkcje, które to mają zamiar zwrócić nieistniejący obiekt.

Porada Obecnie wykorzystywane interpretery JavaScriptu nie pozwalają na używanie nieistniejących obiektów i sygnalizują błąd.