Java Script

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

JAVA SCRIPT

Komentari

Java Script komentari predstavljaju isto što i komentari u drugim programskim jezicima,
mehanizam pomoću koga linije koda koje ne želimo da se posmatraju kao JS kod pretvaramo u
komentare ili koristimo sa opisivanje koda kako bismo kasnije mogli da ga razumemo.

Osnovni Java Sckript komentar je jednolinijski komentar. To je linija teksta ili kod koji počinje sa
dve kose crte u napred //. Sve što sledi posle njih pa do kraja linije neće se posmatrati kao JS kod,
već kao komentar.

Primer:
// ova linija teksta predstavlja jednolinijski komentar

Pored ove vrste komentara postoje i višelinijski komentari. To su komentari pomoću kojih više
linija koda ili teksta pretvaramo u komentare. Sav tekst/kod koji počinje sa /* i završava se sa */
predstavlja višelinijski komentar, kod napisan između ili tekst se neće posmatratio kao JS kod već
će biti prilikom izvršavanja JS preskočen.

Primer:
/*
ova linija teksta
predstavlja višelinijski
komentar
*/

Prilikom upotrebe komentara treba napomenuti da se komentari mogu koristiti unutar linije
koda, i to tako što se navode posle naredbe.

Primer:
alert("Zdravo svete“); // komentari se mogu staviti pri kraju linije

Kod gore prikazanog primera deo alert("Zdravo svete“); posmatra se kao JavaScript kod, dok sve
što sledi nakon // predstavlja deo komentara i ne posmatra se kao JS kod. Funkcija alert će kasnije
biti objašnjena i na nju u ovom trenutku ne treba obraćati pažnju.

Promenljive

Java Script promenljive se deklarišu sa var rezervisanom reči. Prilikom deklaracije promenljive ne
navodi se tip promenljive, zato što u JS ne postoje tipovi promenljivih. Sve promenljive su var
tipa, odnosno mogu da čuvaju u sebi bilo koji tip podataka. Pisanje rezevisane reči var prilikom
deklaracije promenjive nije obavezno. Međutim, u tom slučaju treba biti oprezan, zato što može
da dođe do neželjenih rezultata. Prilikom deklarisanja promenljivih treba znati da postoje dva
opsega promenljivih: lokalni i globalni. Lokalno deklarisana promenljiva živi, odnosno postoji,
samo unutar njenog opsega vidljivosti i to tek nakon linije njene deklaracije. Primer lokalnog
opsega bi bila promenljiva deklarisana unutar funkcije. Globalno deklarisana promenljiva vidljiva
je dok postoji program. To je promenljiva koja je deklarisana van bilo koje funkcije, nema svoj
opseg. Ukoliko se prilikom deklarisanja promenljive izostavi rezervisana reč var pokušava se da
pronađe promenljiva za istim identifikatorom kroz sve slojeve sve do globalnog sloja (opsega
vidljivosti). Ukoliko se prilikom pretrage ne pronađe promenljiva sa istim identifikatorom ,
promenljiva se deklariše sa globalnim opsegom viljivosti. Deklarisanje promenljivih istog
identifikatora (imena) unutar lokalnog i globalnog opsega vidljivosti može dovesti do
neočekivanih rezultata o čemu će malo kasnije biti reči unutar ovog dokumenta.

Primer:
<script> <script>
var i = 4; i = 4;
var j = 6; j = 6;
var n = i + j; n = i + j;
</script> </script>

Gore prikazani primeri, sa i bez upotrebe rezervisani reči var, su isti. Biće deklarisane tri
promenljive, pri čemu promenljive i i j se definišu sa sadržajima 4 i 6, a promenljiva n sa sadržajem
izraza i + j. Nakon izvršavanja ovog izraza promenljiva n će u oba slučaja u sebi čuvati celobrojnu
vrednost 10. Sve tri promenljive će biti tipa number.

Primer:
<script> <script>
var ime = "Imenković"; ime = "Imenković";
var prezime = "Prezimenković"; prezime = "Prezimenković";
var spojeno = ime + prezime; spojeno = ime + prezime;
</script> </script>

Promenljive ime, prezime i spojeno biće tipa string. Promenljiva spojeno u sebi će čuvati string
ImenkovićPrezimenković.

Globalne promenljive su promenljive kojima se može pristupiti sa bilo koje tačke unutar
programa. Generalno, trebalo bi izbegavati deklarisanje promenljivih sa globalnim opsegom
vidljivosti uvek ako se isti posao može obaviti upotrebom lolanih promenljivih, zato što to može
dovesti do problema preklapanja. Takve promenljive su teške za razumevanje i debagovanje.

Primer:
<script>
function saberiDvaBroja(prvi, drugi){
p = prvi;
return p + drugi;
}

var broj1 = saberiDvaBroja(3, 4);


var broj2 = p;
var broj3 = saberiDvaBroja(1, 2);
var broj4 = p;
</script>
U gore navedenom primeru deklarisana je funkcija saberiDvaBroja (funkcije u JS biće razmatrane
kasnije unutar ovog dokumenta) čiji je zadatak da kao povratni sadržaj svom pozivaocu vrati broj
koji predstavlja zbir prosleđenih brojeva čiji su identifikatori prvi i drugi. U telu ove funkcije
deklarisana je promenljiva p koja čuva sadržaj prvog parametra (uvođenje ove promenljive nije
bilo potrebno, ali je uvedena da bi se objasnio problem globalnih promenljivih) čiji je identifikator
prvi. Zato što prilikom deklaracije promenljive p nije korišćena rezervisana reč var ova
promenljiva će biti deklarisana kao globalna.

Prvi test koji je napisan je pokušaj čuvanja povratnog sadržaja funkcije saberiDvaBroja u
promenlivu broj1, u nju će biti sačuvan broj 7. U promenljivu broj2 će biti sačuvan sadržaj
globalne promenljive p, i to je broj 3. Promenljiva p je deklarisana kao globalna prilikom prvog
poziva njenog opsega vidljivosti, to je poziv funkcije saberiDvaBroja, i tom prilikom je definisana
sa sadržajem prvog parametra ove funkcije čiji je identifikator prvi. Sledeći poziv funkcije
saberiDvaBroja će svom pozivaocu, promenljivoj broj3, vratiti povrati sadržaj 3 koji predstavlja
zbir prosleđenih brojeva (1 i 2). Promenljivoj broj4 biće dodeljen sadržaj broj 1, zato što je kod
drugog poziva sadržaj globalne promenljive p 3 pregažen sa novim sadržajem, i to sa vrednosti
prosleđenog prvog parametra drugog poziva funkcije (prosleđeno je 1 i 2).

Primer:
<script>
function saberiDvaBroja(prvi, drugi){
var p = prvi;
return p + drugi;
}

var broj1 = saberiDvaBroja(3, 4);


var broj2 = p;
var broj3 = saberiDvaBroja(1, 2);
var broj4 = p;
</script>

Ovaj primer prijaviće grešku zato što je promenljiva p za razliku od prethodnog primera
deklarisana upotrebom rezervisane reči var. Kao takva ona predstavlja lokalnu promenljivu sa
opsegom vidljivosti funkcije saberiDvaBroja. Odnosno, njen sadržaj se može pročitati/promeniti
samo unutar funkcije. Svaki pokušaj čitanja/menjanja sadržaja spolja prouzrokovaće grešku, tip
greške je prikazan u nastavku.

Null i Undefine

Null predstavlja jedan od osnovnih JS tipova podataka, i on predstavlja odustvo vrednosti.


Prilikom rada sa null vrednostima treba znati jednu veoma važnu napomenu, a to je da kad se
null dodeli bolean promenljivoj ( tačno/netačno - true/false) ona neće imati odsustvo vrednosti
već false vrednost.

Primer:
<script>
var val1 = null;
if( !val1 ){ // proverava se da li je sadržaj val1 jednak false
document.write("promenljiva <b>val1</b> je false <br>");
}
</script>
Za sad ne treba obraćati pažnju na poziv sistemske funkcije document.write(...) jer će ona kasnije
biti objašnjena.

U primeru koji je prikazan ispod deklarisana je promenljiva val2 i definisana sa numeričkom


vrednosti 1. Ono što se vidi je da numerička vrednost 1 nije jednaka null. Upravo zbog toga se 1
ne predstavlja kao false, već kao true prilikom rada sa boolean izrazima. Međutim, ovde postoje
izuzeci kao što je numerička vrednost 0 ili prazan string "".

Primer:
<script>
var val2 = 1;
if( val2 ){ // proverava se da li val2 ima vrednost
document.write("promenljiva <b>val2</b> ima vrednost");
}
</script>

Tip undefine predstavlja nedefinisan, odnosno nepoznat sadržaj. Vraća se kad se pokuša da
pozove svojstvo objekta koji ne postoji. Kao prilikom rada sa null vrednostima, prilikom provere
sadržaja promenljive koja ima undefine sadržaj, u boolean izrazima on se prevodi kao false.

Primer:
<script>
var value;
document.write(value + "</br>");
if( !value ){
document.write("Promenljiva value je bez sadržaja </br>");
}
// pravljenje objekta Osoba koji
// u sebi ima samo jedno svojstvo - ime
var Osoba = {
ime: "Imenković"
}
document.write("Svojstvo age objekta Osoba ne postoji: " + Osoba.age);
</script>
Kasnije u dokumentu biće razmatran rad sa objektima.

Objekti

Polako smo došli do objekata... Prilikom rada sa Java Script jezikom treba znati da je skoro sve u
JS objekat, osim jednostavnih tipova podataka kao što su: stringovi (tip string), brojevi (tip
number), bulean (tip boolean), odustvo vrednosti (tip null), i nepoznati sadržaj (tip undefine).
Kada se radi sa objektima u JS treba ih posmatrati kao kolekcije svojstava. Sadržaj svojstva može
biti bilo kog tipa, i objekat može imati svojstava koliko je potrebno.

U JS objekti se deklarišu navođenjem rezervisane reči var (nije obavezna, važe ista pravila kao za
promenjive) nakon čega sledi identifikator objekta. Telo objekta se definiše sa parom vitičastih
zagrada {} unutar koji se navodi lista svojstava. Prilikom definisanja sadražaja nekog svojstva
nakon identifikatora svojstva mora se staviti : , zato što ona razdvaja svojstvo od njenog sadržaja.
Svojstvo sa svojim sadržajem se od drugih svojstava sa svojim sadržajima unutar istog objekta
razdvajaju zarezom , čije pisanje je obavezno.
Primer:
<script>
// prazan objekat
var prazanObjekat = {};
document.write(prazanObjekat.toString() + "</br>");

// pravljenje novog objekta


var noviObjekat = new Object();
// direktno dodavanje svojstva napravljenom objektu
noviObjekat.ime = "Ivan";
noviObjekat.prezime = "Ivanović";
document.write("IME: " + noviObjekat.ime + " PREZIME: "
+ noviObjekat.prezime + "</br>");

// pravljenje objekta upotrebom literalala - par svojstvo, sadržaj


document.write("----- Osoba -------- </br>");
var Osoba = {
ime: "Ivan",
prezime: "Ivanović",
godina: 23
}
document.write(Osoba.ime + " " + Osoba.prezime
+ " ima " + Osoba.godina + " godine </br>");

document.write("----- Osoba.toString() -------- </br>");


// donje dve linije su iste
// nije potrebno pozivati eksplicitno toString funkciju
// jer podrazumevano ponašanje je njeno pozivanje
document.write(Osoba + "</br>");
document.write(Osoba.toString() + "</br>");

// nadjačavanje ponašanja toString funkcije za objekat Osoba


Osoba.toString = function(){
return this.ime + " " + this.prezime + " ima " + this.godina + " godine";
}

document.write("----- Osoba.toString() nadjačano -------- </br>");


document.write(Osoba + "</br>");

// pravljenje ugnežđenih objekata


var Lice = {
osoba: Osoba,
adresa: {
ulica: "Bulevar Cara Lazara",
broj: 45
}
}
document.write("----- LICE -------- </br>");
document.write(Lice.osoba + " </br>");
document.write(Lice.adresa.ulica + " </br>");
document.write(Lice.adresa.broj + " </br>");

document.write("----- LICE.adresa.toString -------- </br>");


document.write(Lice.adresa + " </br>");

// nadjačavanje toString funkcije svojstva adresa Lica


Lice.adresa.toString = function(){
return "Ulica: " + this.ulica + " Broj: " + this.broj;
}

document.write("----- LICE.adresa.toString nadjačano -------- </br>");


document.write(Lice.osoba + " (toString nadjačano u Osoba)</br>");
document.write(Lice.adresa + " </br>");

</script>

Postoji više načina za pravljenje objekata koje JS nudi. Jedan od načina je pravljenje praznog
objekta i to se postiže sledećom linijom koda:

var prazanObjekat = {}

Zato što se ništa ne nalazi između vitičastih zagrada biće napravljen prazan objekat, objekat bez
i jednog svojstva. Prilikom ispisa sadržaja objekta podrazumevano ponašanje je pozivanje
toString metoda, ne mora ekpislicitno da se naglasi. Zbog tog ponašanja naredne dve linije koda
su iste.

document.write( prazanObjekat );
document.write( prazanObjekat.toString() );

Postoji alternativni način pravljenja objekta koji podrazumeva pravljenje objekta sa naknadnim
dodavanjem svojstava.

var noviObjekat = new Object();


noviObjekat.ime = "Ivan";
noviObjekat.prezime = "Ivanović";

Pravi se noviObjekat i naknadno mu se dodaju svojstva ime i prezime sa sadržajima.

Sledeći primer predstavlja pravljenje objekta sa svojstvima i njihovim predefinisanim vrednstima.

var Osoba = {
ime: "Ivan",
prezime: "Ivanović",
godina: 23
}

Sadržaju svojstva nekog objekta pristupa se pomoću operatora tačka . - kao u OOP C++, Java, C#...

document.write(Osoba.ime + " " + Osoba.prezime + " ima " + Osoba.godina


+ " godine </br>");
Ponašanje funkcije toString() je predefinisano i njen povrati sadržaj predstavlja string
reprezentaciju objekta nad kojim je pozvana koji se sastoji iz tipa i objekta. Ovo ponašanje može
da se promeni nadjačavanjem toString() funkcije određenog objekta. Na primer:
Osoba.toString = function(){
return this.ime + " " + this.prezime + " ima " + this.godina + " godine";
}

Rezervisana reč this predstavlja objekat za koji se nadjačava funkcija. Red koda this.ime znači
pristupi sadržaju svojstva this objekta.

Ako je u nekom trenutku potrebno mogu se praviti ugnežđeni objekti. Na primer:


var Lice = {
osoba: Osoba,
adresa: {
ulica: "Bulevar Cara Lazara",
broj: 45
}
}

Napravljeni objekat Lice sastoji se iz svojstva osoba kome je dodeljen predefinisan sadržaj
promenljive Osoba, i svojstva adresa koje predstavlja objekat koji se sastoji iz svojstva ulica i broj
sa svojim predefinisanim sadržajima.

Jednakost (Equality)

U Java Script-u postoje dva operatora za proveru jednakosti == i ===. Ponašanje ovih operatora
je različito ako su operandi primarnog tipa ili ako su u pitanju objekti. Ako su operani objekti oni
su jednaki jedno sami sebi, dok ako su operandi primarnog tipa oni su jednako ako su vrednosti
jednake.

Primer:
<script>
document.write("------------ ''pas === ''pas'' -------------</br>");
if("pas" === "pas")
document.write("String ''pas'' je jednak stringu ''pas'' </br>");
else
document.write("String ''pas'' nije jednak stringu ''pas'' </br>");

document.write("------------ 1 == ''1'' -------------</br>");


if(1 == "1")
document.write("Sadržaj number broj je jednak stringu str3 </br>");
else
document.write("Sadržaj number broj nije jednak stringu str3 </br>");

document.write("------------ 1 === ''1'' -------------</br>");


if(1 === "1")
document.write("Broj 1 je jednak stringu ''1'' </br>");
else
document.write("Broj 1 nije jednak stringu ''1'' </br>");
</script>
Stringovi "pas" === "pas" su jednaki iako ne predstavljaju iste instance stringa.

Razlika između operatora == i === je u tome što operator == vrši konverziju što može dovesti do
neželjenih rezultata. Zbog toga bi trebalo izbegavati upotrebu != i ==, i umesto njih koristiti !== i
===.

Upotreba operatora == u izrazu 1 == "1" vratiće true, zato što će izvršiti konverziju broja 1 u string
koji se sastoji iz jednog karaktera "1", i nakon izvršene konverzije zapravo će se izvršiti izraz za "1"
== "1".

Primer:
<script>
var Osoba_1 = {
ime: <script>
var Osoba_1 = {
ime: "Ivan",
prezime: "Ivanović",
godina: 23
}

document.write("Osoba_1 == Osoba_1: " + (Osoba_1 == Osoba_1) + " </br>");


document.write("Osoba_1 === Osoba_1: " + (Osoba_1 === Osoba_1) + " </br></br>");

var Osoba_2 = {
ime: "Ivan",
prezime: "Ivanović",
godina: 23
}

// različiti objekti nisu jednaki čak i ako imaju iste vrednosti sadržaja
// jer su to u pitanju različiti objekti
document.write("Osoba_1 == Osoba_2: " + (Osoba_1 == Osoba_2) + " </br>");
document.write("Osoba_1 === Osoba_2: " + (Osoba_1 === Osoba_2) + " </br></br>");

// provera da li su različiti
document.write("Osoba_1 != Osoba_1: " + (Osoba_1 != Osoba_1) + " </br>");
document.write("Osoba_1 !== Osoba_1: " + (Osoba_1 !== Osoba_1) + " </br></br>");

document.write("Osoba_1 != Osoba_2: " + (Osoba_1 != Osoba_2) + " </br>");


document.write("Osoba_1 !== Osoba_2: " + (Osoba_1 !== Osoba_2) + " </br></br>");
</script>

Kao što je ranije rečeno objekti su jedno jednaki sami sebi, dok različiti objekti iako imaju iste
nazive svih svojstava i njihove sadržaje oni nisu jednaki jer su to zasebni objekti.

Funkcije

Funkcije u Java Scriptu se ponašaju drugačije od funkcija u drugim programskim jezicima kao što
su C, C++, Java, C#... Zbog toga da bi mogli ispravno da se koriste trebalo bi prvo razumeti neke
stvari.
Java Script nudi više pristupa za deklarisanje funkcija koje će biti prikazane u nastavku ovog
poglavlja.

U narednim delovima ovog poglavlja razmatraće se:


- upoznavanje funkcija
- deklarisanje funkcija
- pozivanje funkcija
- nadjačavanje (preopterećivanje) funkcija
- objektni argumenti
- rekurzija

Malo ranije u ovom dokumentu je rečeno da je u javi skoro sve objekat. To je tačno jer su čak i
funkcije objekti.

Funkcije ćemo razmatrati na jednom veoma jednostavnom primeru - funkciji koja kao povrati
sadržaj vraća za prosleđeni broj njegov kvadrat.

<script>
function brojNaKvadrat(x){
return x * x;
};
document.write( brojNaKvadrat( 5 ) );
</script>

Funkcije uvek počinju sa rezervisanom reči function, zatim sledi identifikator funkcije koji je
opcionog karaktera. Ukoliko se ne navede pravi se anonimna funkcija - funkcija bez identifikatora.
Nakon identifikatora između običnih zagrada ( ) navodi se nula ili više parametara, i nakon toga
telo funkcije koje počinje sa otvorenom vitičastom zagradom i koje se završava sa zatvorenom
vitičastom zagradom. Reč return je opcionog karaktera. Rezervisana reč return se ne navodi
ukoliko nije potrebno da funkcija vrati sadrža svom pozivaocu. Na primer:
<script>
function brojNaKvadrat(x){
document.write( x * x );
};
brojNaKvadrat( 5 );
</script>

Gore prikazana deklaracija funkcije predstavlja standardnu deklaraciju funkcije. U nastavu je dat
primer deklarisanja iste funkcije sa identifikatorom i njene dodele promenljivoj.

<script>
var kvadratFunkcija = function brojNaKvadrat(x){
return x * x;
};
</script>

Ovako deklarisana funkcija ne može se pozvati preko svog identifikatora, već mora preko
promenljive.

document.write( brojNaKvadrat(5) );
Ovako pozvana funkija brojNaKvadrat nije ispravna jer se mora pozvati preko svoje promenljive
kojoj je dodeljena.

document.write( kvadratFunkcija(5) );

Ako se funkcije deklarišu na ovaj način onda može da se izostavi njen idetifikator, zato što se
može pozvati preko promenljive kojoj je dodeljena.
<script>
var kvadratFunkcija = function (x){
return x * x;
};
document.write( kvadratFunkcija(5) );
</script>

Anonimne funkcije se mogu odmah pozvati tako što se njihova deklaracija smesti unutar para
običnih zagrada, a nakon zatvorene obične zagrade unutar para novih obinih zagrada prosledi
lista parametara.
<script>
( function (x){
document.write( x * x );
} ) (5) ;
</script>

Java Script ne podržava nadjačavanje (preopterećivanje) funkcija.

Kad se funkciji prosleđuju parametri treba znati da se primitivni tipovi uvek prosleđuju po
vrednosti, dok se objekti uvek prosleđuju po referenci.

<script>
// primitivni tipovi se uvek prenose po vrednosti
var value = "Kurs iz JS";
function obrniKaraktere(temp){
temp = temp.split('').reverse().join('');
return temp;
}

document.write( obrniKaraktere(value) + "</br>");


document.write(value + "</br>");

// objekti se uvek prenose po referenci


var tom = {
ime: "Tom"
};
function obrniImeOsobe(osoba){
osoba.ime = obrniKaraktere(osoba.ime);
return osoba;
}
document.write( obrniImeOsobe(tom).ime + "</br>" );
document.write( tom.ime );
</script>
Unutar svake funkcije, bez obzira da li ima ili nema parametre, postoji jedan objekat - arguments.
Ovaj objekat se ponaša kao niz, kao što se indeksiraju nizovi preko uglastih zagrada [] tako se
indeksira i objekat arguments. Takođe, još jedna osobina nizova je da imaju properti length, tako
i objekat arguments ima properti length - koji kao povratnu vrednost vraća broj elemenata
objekta.

Objekat arguments predstavlja listu stvarnih vrednosti u trenutku poziva funkcije.

<script>
function prebrojKaraktere1(){
document.write( arguments.length + "</br>");
}
function prebrojKaraktere2(){
document.write( arguments[0].length + "</br>");
}
function suma(){
var ukupno = 0;
for(var i = 0; i < arguments.length; ++i){
ukupno += arguments[i];
}
return ukupno;
}

prebrojKaraktere1();
prebrojKaraktere1(1);
prebrojKaraktere1(1, 2, 3);
prebrojKaraktere1(23, 3442, "a", 4234, "sdadas", 23.01);

prebrojKaraktere2("abcd");
prebrojKaraktere2("abc453d", 23, "rt");

document.write("Suma: " + suma(1, 2, 3, 4, 5) );


</script>

Java Script funkcije podržavaju rekurziju. Rekurzija predstavlja funkciju koja poziva samu sebe. U
tako napisanim funkcijama veoma je važno napisati kod koji će predstavljati siguran izlaz iz
rekurzije jer u suprotnom može da dođe do prenapunjena memorije steka što dovodi do greške.

U nastavku je dan primer funkcije koja upotrebom rekurzije izračunava faktorijel broja 5.
Faktorijel nekog broja su sve cifre pomnožene međusobno. Fakotrijel broja 5 je: 1 * 2 * 3 * 4 * 5

<script>
function faktorijel(n){
if(n === 0 || n === 1){
return 1;
}
return n * faktorijel(n - 1);
}
document.write( "Faktorijel broja 5 je: " + faktorijel(5) );
</script>
Blokovi

Blokovi predstavljaju načinu grupisanja više linija koda. To se postiže navođenjem linija koda
unutar para vitičastih zagrada { }. Kad se radi sa blokovima veoma je važno znati da u JS blokovi
ne predstavljaju novi opseg viljivosti za promenljive. Ovo znači da ako se deklariše promenljiva
unutar bloka da će biti viljiva i van bloka.

Najednostavniji primeri blokova su dati u nastavku:

If blok
if ( 2 === (1+1) ){
// izvrši ovaj blok ako je uslov tačan
}
if..else blok
if ( false ){
...
}else{
// izvrši ovaj blok
}
if...else if...else blok
if ( false ){
...
}else if(true){
// izvrši ovaj blok
}else{
...
}

Switch blok

Funkcioniše isto kao i u drugim jezicima poput C, C++, C#...


<script>
function bojaŠkoljke(boja){
switch(boja){
case "crvena":
document.write("Školjka je crvena. </br>");
break;
case "plava":
document.write("Školjka je plava. </br>");
break;
case "zelena":
document.write("Školjka je zelena. </br>");
break;
default:
document.write("Nemamo u ponudi tu boju.</br>");
break;
}
}
bojaŠkoljke("plava");
</script>
Petlje

Postoji nekoliko vrsta petlji i one funkcionišu isto kao i u većini ostalih programskih jezika: for,
while, do-while.
<script>
// for petlja
// sastoji se iz 3 delja: inicijalizatora petlja, uslova,
// i inkrementatora/dekrementarotra
document.write("----- FOR PETLJA ----- </br>");
for(i = 0; i < 10; ++i){
document.write(i + "</br>");
}

// do petlja
i = 0;
document.write("----- DO PETLJA ----- </br>");
do{
document.write(i + "</br>");
++i;
}while(i < 10);

// while petlja
i = 0;
document.write("----- DO PETLJA ----- </br>");
while(i < 10){
document.write(i + "</br>");
++i;
}
</script>

JS podržava i for-in petlju koja se koristi za kretanje kroz kolekcije objekta. Slična je C# for-each
petlj, s tim što ova može da se kreće samo kroz svojstva objekta i da pročita sadržaj trenutnog
svojstva.

<script>
var Osoba = {
ime: "Ivan",
prezime: "Ivanović",
godina: 23,
pol: "Muški"
}

// iterira kroz svojstva


document.write("----- Ispis samo svojstava ----- ");
for(var value in Osoba){
document.write(value + "</br>");
}

// iterira kroz svojstva i ispisuje


// nazive svojstava i njihove sadržaje
document.write("----- Ispis svojstava i njihovih sadržaja ----- ");
for(var value in Osoba){
document.write(value + ": " + Osoba[value] + "</br>");
}
</script>

Obrada izuzetaka

Java Script ima u sebi ugrađen mehanizam za obradu izuzetaka try-catch-finally. Izuzetak se
ispaljuje upotrebom rezervisane reči throw. Prilikom ispaljivanja izuzetka program zaustavlja
izvršavanje u toj tački. Prilikom rada sa izuzecima može se pristupiti Excetion objektu greške. Blok
finally osigurava da će se linije koda u njemu izvršiti čak i ako dođe do greške unutar try-catch
bloka.

<script>
try{
throw{
name: "Desila se neka greška.",
message: "Grešku smo izazvali da bi testirali try-catch-finnaly"
}
}catch(e){
document.write(e.name + ": " + e.message + "</br>");
}finally{
document.write("Izvršio se finnaly blok</br>");
}
</script>

JS biblioteke

U ovom poglavlju biće obrađene ne sve već samo najčešće korišćene biblioteke u JS i neke
dodatne koje se uvoze:
- String
- Number
- Array
- Regularni izrazi
- Datumi
- Funkcije biblioteka
- Math objekat

String

JS String predstavlja primitivni tip podataka koji predstavlja uređen skup karaktera. Ne postoji
sintaksa sa pravljenje višelinijskih stringova.

var string1 = "Neki string";


var string2 = "Još jedan string"

JS String dozvoljava upotebu specijalnih karaktera koji počinju sa kosom crtom \ i nakon toga
sledi neki od specijalnih karaktera. Kao što je karakter n koji predstavlja prednos kursora u novi
red.
alert("Prva linija teksta\nDruga linija teksa");
Konkatenacija stringova se obavlja kao i u C# uppotrebom operatora +.

var string1 = "PrviString2 + "DrugiString" + "TrećiString";

Funkcija charAt(index) vraća karater na određenoj poziciji

Funkcija indexOf(string) vraća index stringa koji se traži, prvo poklapanje

Funkcija replace(šta, sa) zamenjuje prvi argument sa drugim, prvo poklapanje

Funkcija slice(početniIndeks, kranjiIndeks) vraća podstring od indeksa do indeksa

Funkcija split(separator) deli string prema prosleđenom separatoru

Funkcija toLowerCace() sve karaktere koji su slova pretvara u mala

Funkcija toUpperCace() sve karaktere koji su slova pretvara u velika

Primer:
<script>
var str = "Prva linija teksta\nNovi tekst";
alert(str);

document.write("str: " + str + "</br>");


document.write("str.charAt(2): " + str.charAt(2) + "</br>");
document.write("str.indexOf(\"ija\"): " + str.indexOf("ija") + "</br>");
document.write("str.replace(\"li\", \"LI\"): " + str.replace("li", "LI") + "</br>");
document.write("str.slice(5, 11): " + str.slice(5, 11) + "</br>");

var s = str.split(" ");

document.write(s[0] + "</br>");
document.write(s[1] + "</br>");
document.write(s[2] + "</br>");
document.write(s[3] + "</br>");

document.write("H)9z7adfe(67guad)".toLowerCase() + "</br>");
document.write("H)9z7adfe(67guad)".toUpperCase() + "</br>");
</script>

Number

Svi brojevi u JS su sa pokretnom tačkom i za rad sa njima obezbeđuje standarne operatore: +, -,


*, /, %

Funkcija toFixed(n) - vraća broj to n decimalnih mesta sa matematičkim zaokruživanjem


<script>
var broj = 1;
document.write("tip promenljive broj1 = 1 je: " + typeof broj + "</br>");

var broj2 = 3.14;


document.write("tip promenljive broj2 = 3.14 je: " + typeof broj2 + "</br>");

var broj3 = 413.123456789;


// vrši se matematičko zaogruživanje
document.write("broj3.toFixed(4) je " + broj3.toFixed(4) + "</br>");

var broj4 = 413.1;


// ako je broj decimala veći od traženih dopisuju se 0 jer nisu značajne
document.write("broj4.toFixed(4) je " + broj4.toFixed(4) + "</br>");
</script>

Array

Nizovi predstavljaju jednu od 2 ugrađene strukture podataka u JS. Oni predstavljaju indeksirane
kolekcije koje u sebi mogu imati sadržaje različitog tipa.

<script>
// elementi niza kreću da se indeksiraju od 0
var prazanNiz = [];
document.write("Dužina praznog niza je " + prazanNiz.length + "</br>");

var slova = ['a', 'b', 'c', 'd'];


for(var i = 0; i < slova.length; ++i){
document.write( slova[i] + "</br>");
}

document.write( slova + "</br>");


slova.push('e');
document.write( slova + "</br>");

slova.reverse();
document.write( slova + "</br>");

document.write( slova.slice(2, 4) + "</br>");

document.write( slova.sort() + "</br>");

document.write( [1, 99, 5, -7, 24].sort() + "</br>");

document.write( [1, 99, 5, -7, 24].sort(function(first, second){ return first - second;


}) + "</br>");

</script>

You might also like