prethodna      sadržaj       slijedeća     
Vodič za core JavaScript 1.5 



Poglavlje 5   Naredbe


JavaScript sadrži kompaktan skup naredbi koje vašim  Web stranicama daje interaktivnost. Ovdje ćete naći pregled takvih naredbi.

Poglavlje sadrži slijedeća poglavlja sa detaljnim opisom svake:

Svaki izraz je također naredba. Vidi Poglavlje 3, "Izrazi i operatori" za potpunu informaciju o naredbama.

Upotrijebite semicolon (;) znak da razdvojite naredbe u JavaScript code-u.

Vidi Core JavaScript Reference za detalje o naredbama.



Block naredba



Block se koristi za grupiranje naredbi. Block se razdvaja parom vitičastih zagrada:

{statement1 statement2 . . .statementn}



Uvjetne naredbe



Uvjetna naredba je skup komandi koje se izvršavaju ako je uvjet true (istinit). JavaScript podržava dvije uvjetne naredbe: if...else i switch .


if...else naredba

Upotrijebite if naredbu za izvršavanje određenih naredbi ukoliko je logički uvjet true. Koristite opcionalni else za izvođenje drugih naredbi ako je uvjet false. Naredba if izgleda ovako:

if (uvjet) {
   naredbe1
}
[else {
   naredbe2
} ]

Uvjet može biti bilo koji JavaScript izraz koji se procjenjuje na true ili false. Naredbe koje se izvršavaju mogu biti bilo koje JavaScript naredbe, uključujuči i daljnje ugnježđene if naredbe.Ako koristite više od jedne naredbe nakon if ili else morate ih zatvoriti u vitičastu zagradu {}.

Ne bi se trebalo koristiti jednostavno pridruživanje kao uvjet. Npr., ne koristite slijedeće:

if(x = y)
{
   /* uradi pravu stvar */
}

Ako trebate jednostavno pridruživanje unutar uvjeta stavite dodatne zagrade. Npr., upotrijebite nešto ovako: if( (x = y) ).

Ne brkajte primitivne Boolean vrijednosti true i false sa true i false vrijednostima Boolean objekta. Bilo koji objekt čija vrijednost nije definirana, null, zero, NaN ili prazan string, uključujući i Boolean objekt čija vrijednost je false, daje rezultat true kada prođe kroz uvjet. Npr.:

var b = new Boolean(false);
if (b) // ovaj uvjet je true

Primjer. U narednom primjeru, funkcija checkData daje true ako je broj znakova u Text objektu tri; u protivnom prikazuje upozorenje i daje false.

function checkData () {
   if (document.form1.threeChar.value.length == 3) {
      return true
   } else {
      alert("Enter exactly three characters. " +       
      document.form1.threeChar.value + " is not valid.")
      return false
   }
}


Naredba switch

Naredba  switch dopušta da program procjenjuje izraz te pokušava da pronađe podudarnost njegove vrijednosti i case labela. Ukoliko se podudarnost pronađe, program izvršava pridruženu naredbu. Naredba switch izgleda ovako:

switch (izraz){
   case label :
      naredba;
      break;
   case label :
      naredba;
      break;
   ...
   default : naredba;
}

Program prvo traži da li se label podudara sa vrijednošću izraza, a zatim izvršava pridruženu naredbu. Ukoliko se ne nađe podudarna labela, program traži opcionalnu default naredbu te ako ju nađe izvršava pridruženu joj naredbu. Ako pak default naredba ne postoji, program se nastavlja iza switch naredbe.

Opcionalna break naredba pridružena svakom case labelu osigurava da program izađe iz switch naredbe kada se podudarna naredba izvrši te da se program nastavi izvršavati na kraju switch naredbe. Ako se break ispusti, program se nastavlja izvršavati kod naredne naredbe unutar switch naredbe.

Primjer. U narednom primjeru, ako expr daje "Bananas", program nalazi podudarnost sa case-om "Bananas" te izvršava pridruženu naredbu. Nakon što se izvrši break program završava sa switch te izvršava naredbu nakon switch -a. Da je break izostavljen, naredba za case (slučaj) "Cherries" također bi se izvršio.

switch (expr) {
   case "Oranges" :
      document.write("Oranges are $0.59 a pound.<BR>");
      break;
   case "Apples" :
      document.write("Apples are $0.32 a pound.<BR>");
      break;
   case "Bananas" :
      document.write("Bananas are $0.48 a pound.<BR>");
      break;
   case "Cherries" :
      document.write("Cherries are $3.00 a pound.<BR>");
      break;
   default :
      document.write("Sorry, we are out of " + i + ".<BR>");
}

document.write("Is there anything else you'd like?<BR>");



Loop (petlja) naredbe



Loop je skup naredbi koje se uzastopno izvršavaju sve dok se ne zadovoljeni uvjet. JavaScript podržava for, do...while   i  while loop naredbe, a također i label (label sam po sebi nije loop naredba, ali se često kristi uz ove naredbe). Nadalje, može se koristiti break i continue naredbe unutar loop naredbi.

Druga naredba, for...in , izvršava naredbe sa ponavljanjima,ali se koristi i za manipulaciju objektima. Vidi  Naredbe za manipulaciju objektima.


Naredba for

For loop (petlja) se ponavlja sve dok određeni uvjet ne postane false (lažan). JavaScript for petlja je slična Java i C for petlji. Sintaxa je:

for ([početniIzraz]; [uvjet]; [incrementIzraz ]) {
   naredbe
}

Kada se for petlja izvršava, događa se slijedeće:


  1. Izvršava se početni izraz ukoliko postoji. Ovaj izraz obično inicijalizira jedan ili više loop brojača, ali sintaxa dozvoljava da izraz ima bilo koji stupanj kompleksnosti. Ovaj izraz može takođe deklarirati varijablu.


  2. Izvršava se uvjetni izraz. Ukoliko je true, petlja se izvršava. Ako uvjet postane false, for petlja skončava. Ako se uvjetni izraz izostavi, smatra se da je uvjet true.


  3. Naredbe se izvršavaju.


  4. Izraz za osvježavanje incrementIzraz, ukoliko postoji, izvršava se i kontrolira povratak na Korak 2.

Primjer. Naredna funkcija sadrži for naredbu koja prebrojava odabrane opcije u scrolling popisu ( Select objekt koji dozvoljava višestruki odabir). Naredba for deklarira varijablu i te postavlja ju na nultu početnu vrijednost. Zatim provjerava da je i manje od broja opcija u Select objektu, izvršava narednu if naredbu te povećava i za jedan nakon svakog prolaska kroz petlju.

<SCRIPT>
function howMany(selectObject) {
   var numberSelected=0;
   for (var i=0; i < selectObject.options.length; i++) {
      if (selectObject.options[i].selected==true)
         numberSelected++;
   }
   return numberSelected;
}

</SCRIPT>
<FORM NAME="selectForm">
<P><B>Choose some music types, then click the button below:</B>
<BR><SELECT NAME="musicTypes" MULTIPLE>
<OPTION SELECTED> R&B
<OPTION> Jazz
<OPTION> Blues
<OPTION> New Age
<OPTION> Classical
<OPTION> Opera
</SELECT>
<P><INPUT TYPE="button" VALUE="How many are selected?"
onClick="alert ('Number of options selected: ' + howMany(document.selectForm.musicTypes))">
</FORM>


do...while naredba

Naredba do...while se ponavlja sve dok određeni uvjet ne postane false. A izgleda ovako :

do {
   naredba
} while (uvjet)

Naredba se izvršava jednom prije nego je uvjet provjeren. Ako je uvjet true naredba se ponovo izvršava. Uvjet se provjerava na kraju svakog izvršenja . Kada uvjet postane false izvršavanje se zaustavlja te se kontrola prosljeđuje naredbi nakon do...while petlje .

Primjer. U narednom primjeru  do petlja iterira najmanje jednom i to ponavlja sve dok i ne postane manje od 5.

do {
   i+=1;
   document.write(i);
} while (i<5);


while naredba

Naredba while izvršava svoje naredbe sve dok je uvjet true. Ona izgleda ovako:

while (uvjet) {
   naredbe
}

Ako uvjet postane false, naredbe unutar petlje se stopiraju te se nastavlja s izvršavanjem naredbe iza petlje.

Test uvjeta se odigrava prije nego se naredbe počnu izvršavati. Ako je uvjet true naredbe se izvršavaju te se uvjet ponovno testira. Kad uvjet postane false izvršavanje se stopira te se nastavlja s izvršavanjem naredbe iza petlje.

Primjer 1. Naredna while petlja iterira sve dok je n manje od tri:

n = 0;
x = 0;
while( n < 3 ) {
   n ++;
   x += n;
}

Sa svakom iteracijpm, petlja povećava n i dodaje tu vrijednost x -u. Tako da x i n poprimaju slijedeće vrijednosti:

Nakon svršetka trećeg prolaska uvjet n < 3 više nije true pa se petlja zaustavlja.

Primjer 2: infinite loop (beskonačna petlja). Osigurajte da uvjet jednom postane false jer se inače petlja nikad neće okončati. U ovom primjeru naredba će se vječno izvršavati jer je uvjet uvijek true:

while (true) {
   alert("Hello, world") }


label naredba

Label omogućava postojanje naredbe sa identifikatorom koji omogućava da ju pozovemo (petlju) bilo gdje u programu. Npr., može se upotrijebiti label za identificiranje petlje, a zatim koristiti break ili continue naredbe da bi petlju nastavili ili ju prekinuli.

Sintaxa je:

label :
   naredba

Vrijednost label -a može biti bilo koji JavaScript identifikator koji nije rezervirana riječ. Naredba koju identificiramo s labelom može biti bilo koja naredba.

Primjer. U ovom primjeru, labela markLoop identificira while petlju.

markLoop:
while (theMark == true){
   doSomething();
}


break naredba

Upotrijebite break naredbu za prekidanje petlje, switch -a ili label naredbe.

Sintaxa je:

1. break
2. break label

Prvi oblik sintaxe okončava najunutrašnjiju petlju ili switch. Drugi oblik sintaxe okončava labeliranu naredbu.

Primjer. Ovaj primjer iterira kroz elemente niza sve dok ne nađe index elementa čija je vrijednost theValue:

for (i = 0; i < a.length; i++) {
   if (a[i] = theValue)
      break;
}


continue naredba

Naredba continue može se koristiti za restart  while, do-while , for ili label naredbe.

Sintaxa je:

1. continue
2. continue label

Primjer 1. Primjer pokazuje while petlju sa continue naredbom koja se izvršava kada je i jednako tri. Na ovaj način n uzima vrijednosti jedan, tri, sedam i dvanaest.

i = 0;
n = 0;
while (i < 5) {
   i++;
   if (i == 3)
      continue;
   n += i;
}

Primjer 2. Naredba labelirana sa checkiandj sadrži naredbu labeliranu sa checkj. Kada program dođe do continue završava se trenutna iteracija od checkj i započinje slijedeća. Svaki put kada se dođe do continue, checkj ponovo iterira sve dok uvjet postane false. Kada je false vraćen, ostatak od checkiandj naredbe se završava i checkiandj ponovno iterira sve dok uvjet ne postane false. Kada je false vraćen, program nastavlja s naredbom iza checkiandj.

Ako continue ima labelu checkiandj , program će nastaviti sa vrha checkiandj naredbe.

checkiandj :
   while (i<4) {
      document.write(i + "<BR>");
      i+=1;
      checkj :
         while (j>4) {
            document.write(j + "<BR>");
            j-=1;
            if ((j%2)==0)
               continue checkj;
            document.write(j + " is odd.<BR>");
         }
      document.write("i = " + i + "<br>");
      document.write("j = " + j + "<br>");
   }



Naredbe za manipulaciju objektima



JavaScript upotrebljava for...in te with naredbe pri manipulaciji objektima.


for...in naredba

Naredba for...in iterira određenu varijablu kroz sva svojstva objekta. Za svako različito svojstvo JavaScript izvršava određenu naredbu.Sintaxa glasi:

for (varijabla in objekt) {
   naredbe ; }

Primjer. Naredna funkcija uzima za svoj argument objekt i naziv objekta. Zaim iterira kroz sva svojstva objekta i daje kao rezultat string koji izlistava nazive svojstava i njihove vrijednosti.

function dump_props(obj, obj_name) {
   var result = "";
   for (var i in obj) {
      result += obj_name + "." + i + " = " + obj[i] + "<BR>"
   }
   result += "<HR>";
   return result;
}

Za objekt car sa svojstvima make i model rezultat je:

car.make = Ford
car.model = Mustang


with naredba

Naredba with stvara default objekt za skup naredbi. JavaScript pretražuje svaki nekvalificirani naziv unutar skupa naredbi da odredi da li su to nazivi svojstava default objekta. Ukoliko se nekvalificirani naziv podudara sa svojstvom tada je svojstvo upotrijebljeno u naredbi; inače se upotrijebi local ili global varijabla.

Sintaxa je:

with (objekt){
   naredbe ;
}

Primjer. Naredna with naredba određuje da Math objekt bude default objekt. Naredbe nakon with odnose se na PI svojstvo te na cos i sin metode bez specificiranja objekta.

var a, x, y;
var r=10 ;
with (Math) {
   a = PI * r * r;
   x = r * cos(PI);
   y = r * sin(PI/2);
}

Uočite: Upotreba with naredbe može znatno usporiti vaš program.



Komentari



Komentari su zabilješke autora koje pokazuju što skripta radi. Interpreter ignorira komentare. JavaScript podržava Java i C++ komentare:

Primjer. Naredni primjer pokazuje 2 komentara:

// Ovo je komentar u jednoj liniji.

/* Ovo je komentar u više linija. Može biti 

bilo koje veličine i ovdje možete staviti što god hoćete. */



Naredbe za rukovanje izuzecima



Izuzeci se mogu izbaciti sa throw naredbom, a upravljat sa izuzecima pomoću try...catch naredbi.

Takođe koristite try...catch za rukovanje Java izuzecima. Vidi  "Rukovaje sa Java izuzecima u JavaScriptu" str. 141  te  "Rukovanje sa JavaScript izuzecima u Javi" str. 144 .


Naredba throw 

Upotrijebite throw naredbu za izbacivanje izuzetka. Kada izbacite izuzetak određujete izraz koji sadrži vrijednost izuzetka:

throw izraz

Naredni code izbacuje nekoliko izuzetaka.

throw "Error2";    // generira izuzetak sa string vrijednošću
throw 42;          //
generira izuzetak sa vrijednošću 42
throw true;        //
generira izuzetak sa vrijednoću true

Kada se izbacuje izuzetak može se odrediti i objekt. Tada se može pozvati svojstvo objekta u catch bloku. Naredni primjer stvara objekt myUserException tipa UserException i to koristi u throw naredbi.

// Stvaranje objekta UserException
function UserException (message) {
   this.message=message;
   this.name="UserException";
}
// Kreira stavku objekta i izbacuje ju
myUserException=new UserException("Value too high");
throw myUserException;


Naredba try...catch

Naredba try...catch markira blok naredbi da iskuša i odredi jedan ili više odziva na koje izuzetak treba biti izbačen. Ako je izuzetak izbačen, try...catch naredba ga hvata.

Naredba try...catch sastoji se od try bloka, koji sadrži jednu ili više naredbi, te nijedan ili više catch blokova, sadržavajući naredbe koje određuju što da se radi ako je izuzetak bačen u try blok. To jest, želite da try block slijedi iza, a ako ne, želite kontrolirati prijelaz na catch blok. Ukoliko bilo koja naredba u try bloku (ili u funkciji pozvanoj iz try bloka) izbaci izuzetak, kontrola se pomiče na catch blok. Ukoliko nijedan izuzetak nije izbačen u try bloku, catch blok se preskače. Posljednji blok se izvršava nakon try i catch blokova, ali prije naredbi koje slijede iza try...catch naredbe.

Naredni primjer koristi try...catch naredbu. Primjer poziva funkciju koja uzima ime mjeseca iz niza zasnovanog na vrijednosti proslijeđenoj funkciji. Ako vrijednost ne odgovara broju mjeseca (1-12), izuzetak je bačen sa vrijednošću "InvalidMonthNo" i naredbe u catch bloku postavljaju varijablu monthName u "unknown".

function getMonthName (mo) {
   mo=mo-1; // Adjust month number for array index (1=Jan, 12=Dec)
   var months=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul",
      "Aug","Sep","Oct","Nov","Dec");
   if (months[mo] != null) {
      return months[mo]
   } else {
      throw "InvalidMonthNo"
   }
}

try {
   // statements to try
   monthName=getMonthName(myMonth) // function could throw exception
}
catch (e) {
   monthName="unknown"
      logMyErrors(e) // pass exception object to error handler
}


catch blok

Može se koristiti jedan catch blok za upravljanje svim izuzecima koji su stvoreni u try bloku ili se može upotrijebiti zasebni catch blokovi od kojih će svaki upravljati posebnim tipom izuzetka.


Single catch Block
Upotrijebite jedan try...catch naredbeni catch blok (recovery block) da izvršite code koji upravlja pogreškama za bilo koji izuzetak izbačen u try bloku.

Jednostruki catch blok ima sintaxu:

catch (catchID) {
   statements
}

Blok catch određuje identifikator (catchID u prethodnoj sintaxi) koji drži vrijednosti određene pomoću throw naredbe. Ovaj identifikator može se upotrijebiti za prikupljanje informacije o izuzetku koji je izbačen. JavaScript stvara ovaj identifikator kada se catch blok unosi;identifikator traje samo dok traje catch blok; nakon što catch blok završi izvršavanje identifikator više nije dostupan.

Npr., naredni code izbacuje izuzetak. Kad se desi izuzetak kontrola prelazi na catch blok.

try {
   throw "myException" // generates an exception
}
catch (e) {
   // statements to handle any exceptions
   logMyErrors(e) // pass exception object to error handler
}


Višestruki catch blokovi
Jedna try naredba može imati više uvjetnih catch blokova, tako da svaki upravlja određenim tipom izuzetka. U ovom slučaju, odgovarajući uvjetni catch blok se unosi samo kad je izbačen izuzetak određen za taj blok. Takođe možete ukjlučiti opcionalni catch-all catch block za sve neodređene izuzetke kao posljednji catch blok u naredbi.

Npr., naredna funkcija poziva tri druge funkcije (deklarirane bilo gdje), koje provjeravaju valjanost svojih argumenata.Ako funkcija odredi da je komponenta nevaljala, daje 0, uzrokujući bacanje određenog izuzetka.

function getCustInfo(name, id, email)
{
   var n, i, e;

   if (!validate_name(name))
      throw "InvalidNameException"
   else
      n = name;
   if (!validate_id(id))
      throw "InvalidIdException"
   else
      i = id;
   if (!validate_email(email))
      throw "InvalidEmailException"
   else
      e = email;
   cust = (n + " " + i + " " + e);
   return (cust);
}

Uvjetni catch blokovi šalju kontrolu odgovarajućem rukovatelju izuzetkom.

try {

// function could throw three exceptions
   getCustInfo("Lee", 1234, "lee@netscape.com")
}

catch (e if e == "InvalidNameException") {
// call handler for invalid names
bad_name_handler(e)
}

catch (e if e == "InvalidIdException") {
// call handler for invalid ids
bad_id_handler(e)
}

catch (e if e == "InvalidEmailException") {
// call handler for invalid email addresses
bad_email_handler(e)
}

catch (e){
// don't know what to do, but log it
logError(e)
}


Blok finally

Blok finally sadrži naredbe koje se izvrše nakon try i catch blokova ali prije naredbi koje su iza try...catch naredbe. Blok finally se izvršava bez obzira da li je izuzetak bačen ili ne. Ako je izuzetak bačen, naredbe u finally bloku se izvršavaju čak iako nijedan catch blok ne upravlja izuzetkom.

F inally block može se upotrijebiti tako da vam skripta bude "otporna" na propuste. Naredni primjer otvara fajl, a zatim izvršava naredbe koje koriste taj fajl (server-side JavaScript dopušta pristup fajlovima). Ukoliko je izuzetak bačen dok je fajl otvoren, finally blok zatvara fajl prije završetka skripte.

openMyFile();
try {
   writeMyFile(theData)
}
finally {
   closeMyFile() // always close the resource
}


Ugnježđivanje try...catch naredbi

Može se ugnjezditi jedna ili više try...catch naredbi. Ako unutrašnja try...catch naredba nema catch blok, ograđivajući try...catch naredbeni catch blok se provjerava za podudaranje.


prethodna      sadržaj       slijedeća      
Copyright © 2000 Netscape Communications Corp. All rights reserved.

Posljednje izmjene Rujan 28, 2000