Referentni tipovi
Tipovi podataka
U JavaScriptu postoji nekoliko tipova podataka. Formalni tipovi podataka su:
• String – niz znakova unutar navodnika
• Number – bilo koji broj koji nije pod navodnicima
• Boolean – true/false – logičko istinito ili neistinito
• Null - lišeno vrednosti, nepoznata vrednost
• Object – obuvata sva svojstva i metode koji pripadaju objektu
• Array - niz koji skladišti više vrednosti
• Date - objekat koji radi sa datumom i vremenom
• Function – definicija funkcije
Java Script varijable mogu da sadrže različite tipove podatake koje smo gore naveli. Među njima, primitivni tipovi podataka su String, Number, Boolean.
String
String je niz karaktera sačinjen od nula ili više znakova. String može biti bilo koji tekst koji se piše između navodnika. Navodnici mogu biti jednostruki ili dvostruki.
Npr:
var ime = “Marko Marković”;
//korišćenje dvostrukih navodnika
var ime = ‘Marko Marković;
//korišćenje jednostrukih navodnika
Takođe, često se javlja potreba da se koriste navodnici unutar stringa. To se može uraditi korišćenjem escape karaktera (kose crte \ ).
Npr:
var tekst = “Njegovo ime je \”Marko Marković\”.”;
U stringovima je dozvoljeno koristiti sledeće specijalne karaktere:
• \b = pomeraj za jedno mesto ulevo (backspace)
• \f = pomeraj jedan red dole (form feed)
• \n = na početak novog reda (new line character)
• \r = return (carriage return)
• \t = tabulator (tab).
JavaScript je slabo tipiziran jezik. Tipovi podataka će biti automatski konvertovani zavisno od mesta njihove upotrebe u programu.
Tako, na primer možemo definisati i inicijalizovati sledeću promenljivu:
var promenjiva = 7;
a kasnije joj dodeliti neku drugu vrednost, odnosno možemo je predefinisati.
var promenljiva = “Java Script”;
Kada govorimo o kombinaciji broja i stringa, Java Script konvertuje broj u string.
Npr:
var primer = “Ovo je primer “ + 15;
ili
var primer = 13 + “primer”;
Za konverziju stringa u broj koriste se sledeće funkcije:
• EVAL – ocenjuje string i pretvara ga u broj ako je moguće
• parseINT – konvertuje string u Integer,ako je moguće
• parseFLOAT – konvertuje string u Float tip ,ako je moguće
Number
Celi brojevi u JavaScriptu mogu biti predstavljeni u tri osnove:
u decimalnom (baza 10), u oktalnom (baza 8) i heksadecimalnom (baza 16) formatu.
Decimalni celi brojevi se predstavljaju kao niz cifara (0-9) bez vodeće nule.
Oktalni celi brojevi se predstavljaju kao niz cifara (0-7) predvođen sa nulom (“0”).
Heksadecimalni celi brojevi se predstavljaju kao niz cifara (0-9) i slova (a-f i A-F) predvođen sa nulom koju sledi slovo x (“0x” ili “0X”).
Primer prestavljanja celog broja deset (10) u tri brojna sistema:
• decimalnom: 10.
• oktalnom: 012.
• heksadecimalnom: 0xA.
Brojevi u pokretnom zarezu Brojevi u pokretnom zarezu imaju sledeće delove: decimalni ceo broj, decimalnu tačku (“.”), deo iza decimalnog zareza (decimalni ceo broj), eksponent (“e” ili “E”, praćen decimalnim celim brojem).
Primeri brojeva u pokretnom zarezu:
• 1.1234
• .1E23
• -1.1E12
• 2E-10
Infinity ( ili -Infinity) je vrednost koju će da vrati Java Script ako radimo sa brojevima koji su veći od najvećeg mogućeg broja. Deljenje sa nulom će da generiše Infinity vrednost.
var x = 2/0;
// x će imati vrednost Infinity
var x = -2/0
// x će imati vrednost –Infinity
Infinity je broj : typeOf Infinity će da vrati number.
typeOf Infinity; //vraća number
Boolean
Promenljive tipa Boolean mogu imati dve vrste vrednosti: true (tačno) ili false (netačno).
var x = true;
var y = false;
Boolean funkcija se može koristiti da utvrdimo da li je neki izraz tačan ili ne.
Boolean(10>9)
//vraća true
Array objekat
Array objekat se koristi za čuvanje seta vrednosti u jednom imenu promenljive. Niz je kao i u drugim programskim jezicima uređena kolekcija podataka, međutim za razliku od drugih programskih jezika, JavaScript dozvoljava da se u jednom nizu nalaze podaci različitog tipa (zbog slabe tipiziranosti JavaScript-a). Svakom elementu niza dodeljuje se vrednost indeksa preko koga mu se može direktno pristupiti. Indeksiranje u nizu počinje od nule. Sledeća linija koda definiše objekat array koji je nazvan myArray:
var myArray = new Array;
Ključna reč new se koristi da bi se dinamički kreirao objekat tipa Array. On poziva konstruktor objekta Array() pri čemu se kreira novi objekat tipa Array. Veličina niza može biti prosleđena kao argument konstruktora.
var myArray = new Array(10);
U gornjem primeru je kreiran objekat tipa Array koji ima 10 elemenata. Postoje dva načina za dodavanje vrednosti nizu:
• moguće je dodati koliko god je potrebno vrednosti za definisanje promenljivih koje su potrebne
var mojakola=new Array();
mojakola[1]="Golf";
mojakola[2]="BMW";
• moguće je dodati ceo sadržaj za kontrolisanje
var mojakola=new Array("Golf", "BMW")
Pristup nizu
Moguće je obratiti se posebnom elementu u nizu, obraćajući se imenu niza i broju indeksa. Indeks počinje od 0.
document.write(mojakola[0]);
Kao rezultat ovog koda pojaviće se: "Golf".
Asocijativni nizovi
Asocijativni niz je niz koji umesto numeričkih vrednosti koristi stringove za indeksiranje vrednosti. Postoji asocijacija između indeksa i vrednosti sačuvane na toj lokaciji. Indeks se obično zove i key a dodeljena vrednost value. Ovi key/value parovi su uobičajen način za čuvanje i pristup podacima. U sledećem nizu drzave postoji asocijacija između vrednosti indeksa (skraćenice za državu) i sačuvane vrednosti (celog imena države). Za iteraciju kroz elemente ovakvog niza možemo da koristimo for petlju.
Niz indeksiran stringovima
Rezultat ovog ovog JavaScripta je spisak skraćenica i celih naziva država.
Svojstva Array objekta
Objekat Array ima samo tri svojstva. Najčešće korišćeno svojstvo je length koji određuje broj elemenata niza, tj. njegovu dužinu.
Svojstvo | Opis |
---|---|
constructor | referencira konstruktor objekta Array |
length | vraca broj elemenata niza |
prototype | prosiruje definiciju niza dodajuci mu svojstva i metode |
Sledi primer u kom je prikazana primena svojstava Array objekta.
Svojstva niza
Rezultat ovog JavaScripta će biti “Niz knjiga ima 3 elemenata”.
Metode Array objekta
Metoda | Opis |
---|---|
concat() | Dodaje elemente jednog niza drugom nizu |
join() | Spaja elemente niza odvojene separatorom i formira string |
pop() | Briše i vraća poslednji element niza |
push() | Dodaje elemente na kraj niza |
reverse() | Obrće raspored elemenata u nizu |
shift() | Briše i vraća prvi element niza |
slice() | Kreira novi niz od elemenata postojećeg niza |
sort() | Sortira niz po abedecnom ili numeričkom redosledu |
splice() | Uklanja i/ili zamenjuje elemente niza |
toLocaleString() | Vraća niz predstavljen stringom u lokalnom formatu |
toString() | Vraća niz predstavljen stringom |
unshift() | Dodaje elemente na početak niza |
Tabela 10 Metode objekta Array
Concat() metoda
Metoda concat() dodaje elemente prosleđene kao argumente u postojeći niz i vraća novoformirani niz.
noviNiz = stariNiz.concat(new elementi);
Primer upotrebe:
Pop() metoda
Pop() metoda briše poslednji element niza i kao rezultat izvršavanja vraća taj skinuti element niza.
var poslednja_vrednost = mojNiz.pop();
Sledi primer upotrebe:
Kao rezultat izvršavanja ovog programa dobićemo da originalni niz ima elemente: Ana, Dragan, Maja, da je skinut element Maja, a novi niz ima elemente Ana,Dragan.
Push() metoda
Metoda push() dodaje nove elemente na kraj niza, pri čemu se alocira potrebna memorija.
mojNiz.push(new elementi);
Primer upotrebe metode push():
Kao rezultat izvršavanja gornjeg primera dobićemo ispisane elemente prvobitnog niza: Ana, Vlada, Dragan, Maja i dobićemo ispisane elemente novog niza: Ana, Vlada, Dragan, Maja, Sandra, Tanja.
Metode shift() i unshift()
Metoda shift() uklanja prvi element niza i kao rezultat vraća uklonjenu vrednost, dok unshift() metoda dodaje element na početak niza. Ove metode su kao pop() i push() sem što se odnose na početak niza a ne na njegov kraj.
Metoda slice()
Metoda slice() kopira elemente jednog niza u drugi i ima dva argumenta: prvi je broj koji predstavlja početni element od koga će krenuti kopiranje, a drugi element predstavlja poslednji element (on se ne uključuje). Pri tome treba imati u vidu da je prvi element niza na poziciji " 0". Pritom originalni niz ostaje nepromenjen.
var noviNiz = mojNiz.slice(indeks prvog elementa, indeks poslednjeg elementa);
Primer upotrebe metode slice():
Kao rezultat izvršavanja gornjeg programa dobićemo ispisane elemente početnog niza: Ana, Vlada, Dragan, Maja, kao i ispisane elemente novog niza: Ana, Sandra, Tanja, Pera, Maja.
Objekat Date
Date objekti se koriste za rad sa datumom i vremenom. Postoji veliki broj metoda za dobijanje informacija vezanih za datum i vreme. Datum je zasnovan na UNIX-ovom datumu počev od 1.januara 1970. i ne podržava datume pre njega. S obzirom da se JavaScript izvršava u čitaču Date objekat vraća vreme i datum lokalnog računara, a ne servera. Ako vreme nije dobro podešeno na korisničkom računaru onda se ni vrednosti neće dobro prikazivati.
Primeri kreiranja Date objekta:
var Date = new Date();
// Konstruktor koji vraća Date objekat
var Date = new Date("July 4, 2004, 6:25:22");
var Date = new Date("July 4, 2004");
var Date = new Date(2004, 7, 4, 6, 25, 22);
var Date = new Date(2004, 7, 4);
var Date = new Date(Milliseconds);
Svojstva Date objekta
Objekat Date ima samo jedno svojstvo prototype.
Metode Date objekta
Date objekat ima veliki broj metoda. U tabeli su prikazane neke od metoda.
Metoda | Opis |
---|---|
getDate | Vraća dan u mesecu |
getDay | Vraća dan u nedelji |
getFullYear | Vraća godinu ispisanu sa sve 4 cifre |
getHours | Vraća sat u danu |
getMonth | Vraća broj meseca (Januar – 0) |
getTime | Vraća broj milisekundi počev od 1.januara 1970. |
parse() | Konvertuje string u date objekat |
setDate(value) | Postavlja datum u mesecu |
setFullYear() | Postavlja godinu |
setHours() | Postavlja sat u danu |
setTime() | Postavlja vreme od 1.januara 1970. u milisekundama |
toString() | Vraća string objekat koji predstavlja datum i vreme |
Primer izvršenja gornjeg koda je:
Lokalno vreme: Mon Feb 29 23:00:31 UTC+0100 2016
Godina je 2016
Vreme je: 23:0:31
Vrednost lokalnog vremena će zavisiti od trenutka izvršavanja programa i biće prikazano vreme na klijentu.
Object type
Kreiranje objekata
Kreiranje objekta se odvija u dva koraka:
- Definisanje tipa objekta preko pisanja funkcije,
- Kreirajući instancu objekta sa new. Da bi definisali tip objekta moramo napisati funkciju koja određuje njegovo ime, njegove osobine i metode. Na primer, pretpostavimo da želimo da kreiramo tip objekta za studente. Neka se objekat zove student i neka ima osobine ime, srednje_ime, prezime i indeks. Da bi to uradili potrebno je da napišemo sledeću funkciju:
function student(ime, srednje_ime, prezime, indeks) { this.ime=ime; this.ime_roditelja = srednje_ime; this.prezime=prezime; this.Indeks=indeks; }
Sada možemo da kreiramo objekat student1 pozivajući funkciju student preko new:
student1=new student(“Pera”, “Petar”,”Perić”, ”2012/99”);
Objektu možemo da dodamo i metode. Recimo, funkcija prikaziProfil() koja ispisuje sve podatke o studentu:
function prikaziProfil() {
document.write("Ime: " + this.ime + "
");
document.write("Srednje ime: " + this.ime_roditelja + "
");
document.write("Prezime: " + this.prezime + "
");
document.write("Indeks: " + this.Indeks + "
");
}
Sada ćemo ponovo napisati funkciju student() preko koje definišemo objekat.
function student(ime, srednje_ime, prezime, indeks) { this.ime=ime; this.ime_roditelja = srednje_ime; this.prezime=prezime; this.Indeks=indeks; this.prikaziProfil=prikaziProfil; }
Kada definišemo objekat student1, funkciji prikaziProfil() se pristupa preko:
student1.prikaziProfil();
Objekat može da ima svojstvo koje je i samo objekat. Na primer, objekat tipa student, može u sebe uključivati svojstva profesor i predmet, koja su i sama objekti. I tako redom.
Objektu Student možemo dodeliti svojstva pod nazivima ime, ime_roditelja, prezime i Indeks na sledeći način:
Student.ime=”Pera”; Student.ime_roditelja=”Petar”; Student.prezime=”Perić”; Student.Indeks=”100/99”;**
Ovo nije jedini način pristupa svojstvima objekta. Nizovi su skup vrednosti organizovan po brojevima kome je dodeljeno jedno ime promenljive. Osobine objekta i nizovi su u JavaScriptu direktno povezani, oni zapravo predstavljaju različit način pristupa istoj strukturi podataka. Tako, na primer, osobinama objekta Student možemo pristupiti i na sledeći način, potpuno ekvivalentan prethodnom primeru:
Student[”ime”]=”Pera”; Student[”ime_roditelja”]=”Petar”; Student[”prezime”]=”Perić”; Student[”Indeks”]=”100/99”;
Takođe je moguće prići svakoj od osobina niza i preko indeksa. Tako je potpuno ekvivalentno gornjim načinima ekvivalentan i pristup preko indeksa:
Student[0]=”Pera”; Student[1]=”Petar”; Student[2]=”Perić”; Student[3]=”100/99”;
Metoda je funkcija pridružena objektu. Programer definiše metod na isti način kao što definiše funkciju. Potom tu funkciju pridružuje objektu na sledeći način:
NazivObjekta.NazivMetode = NazivFunkcije
gde je NazivObjekta postojeći objekat, NazivMetode je naziv koji dodeljujemo metodi, a NazivFunkcije je naziv funkcije koju povezujemo sa objektom. Potom možemo pozivati metodu u kontekstu objekta kao:
NazivObjekta.NazivMetode(parametri);
JavaScript ima specijalnu rezervisanu reč, this, koja se koristi za referenciranje na trenutni objekt.
Na primer, ako imamo funkciju Proveri() koja proverava da li se vrednost osobine objekta nalazi u propisanim granicama:
function Poveri(obj, donja, gornja){ if((obj.value < donja)||(obj.value > gornja)) alert(“Pogrešna vrednost”) }
Objekat Math
JavaScript obezbeđuje mnoštvo matematičkih mogućnosti. Sve ove mogućnosti sadržane su u matematičkom objektu math. Ovaj objekt se razlikuje od drugih po tome što se za njegovu upotrebu ne pravi njegova kopija. Skriptovi direktno pozivaju svojstva i metode objekta math i on je deo reference.
round() - metod zaokružuje broj na najbliži integer.
Sintaksa
Math.round(x)
random() - metod vraća nasumice izabran broj između 0 i 1.
Sintaksa
Math.random()
max() metod vraća broj sa najvećom vrednošću od dva specifičbna broja. Sintaksa
Math.max(x,y)
min() - metod vraća broj sa najmanjom vrednosti izmađu dva specifična broja.
Sintaksa
Math.min(x,y)
Function
Java Script Function je deo koda koji izvršava neki poseban zadatak i izvršava se kad se desi neki događaj, kada je funkcija pozvana od strane Java Script koda ili automatski (self-invoked funkcija). Sintaksa za kreiranje funkcije Sintaksa za kreiranje funkcije je:
function imefunkcije(var1,var2,...,varX) { Neki kod }
Var1,var2,..,varX su promenljive ili vrednosti prosleđene funkciji.
Zagrade { } definiše početak i kraj funkcije.
Funkcije bez parametara moraju imati zagrade { } posle naziva imena funkcije. Ime funkcije je praćeno (). Ime funkcije može da sadrži slova, brojeve, donju crtu i znaka za dolar ($). Ne treba zaboraviti značaj velikih slova u JavaScript-u. Reč function mora biti napisana malim slovima, u suprotnom će se desiti greška. Takođe, kada se poziva funkcija njeno ime mora biti navedeno identično kao kada se ona definiše.
Naredba return se koristi kada je potrebno odrediti vrednost koju funkcija vraća, i sve funkcije koje vraćaju neku vrednost moraju imati return naredbu.
function proizvod(a,b) { return a*b }
Prethodna funkcija vraća proizvod dva broja. Da bi se pozvala navedena funkcija moraju se proslediti i dva parametra:
product=proizvod(4,5)
Rezltujuća vrednost ove prod() funkcije je 20, i ona će biti smeštena u promenljivu nazvanu product.
Značaj definisanja funkcija se ogleda u tome što funkciju definišemo samo jednom, a možemo je koristiti koliko hoćemo puta (reusable code). Isti kod, sa različitim argumentima će proizvesti različit rezultat.
U Java Scriptu možemo da koristimo funkcije na isti način kao što koristimo varijable.
Npr. var tekst = “Proizvod brojeva 3 i 4 je : “ + proizvod(3,4);