:  Retur til startside  :  Til JavaScript startside

KONTROLSTRUKTURER    

break     continue     do..while     for     if     switch     try     while     with

Kontrolstrukturer er et andet ord for løkker og forgreninger i programafviklingen. I Javascript er kontrolstrukturerne stort set identiske med dem i C, C++ og Java.
boolsk står for Boolske udtryk, noget der kan udregnes til enten true eller false, eller en af konstanterne true eller false. Ved boolske udtryk i ( runde paranteser ) skal de runde paranteser med.
Ved sætninger i { krøllede paranteser } er de krøllede paranteser valgfri, men skal dog med, hvis der skal udføres mere end én sætning.
Kontrolstruktur Forklaring, Eksempel, afprøvning af eksempel, kommentarer til eksempel
if (boolsk) {sætninger}

if (boolsk) {sætninger1}
else{sætninger2}
Hvis boolsk udtryk udregnes til true, udfør sætninger, ellers hvis der er en else-del, udfør flere sætninger.
I stedet for en IF-sætning kan man bruge  ?  operatoren:
   (boolsk) ? {sætninger1} : {sætninger2}
 
for (var = startværdi;
     betingelse;
     opdater var) {sætninger}
sætninger udføres gerne flere gange, men det stoppper når betingelse ikke længere er opfyldt.
for (i=0; i<10; i++) {document.write(i+' ')}

Både betingelse og opdater var kan undværes, dvs indbygges i sætninger, og begge ; skal med:
for (var i=0;;) {if (i>=10) break; document.write(i+' '); i++}

for (var in object) {sætninger} var sættes på skift til alle de variable objektet ejer, og hver gang udføres sætninger
do {sætninger} while (boolsk) var i=9; do document.write(i-- +' '); while (i>=0);

Her er benyttet, at i-- både trækker én fra i og returnerer den gamle værdi af i.
while (boolsk) {sætninger} var i=9; while (i>=0) document.write(i-- +' ');

 
switch (udtryk) {
 case vaerdi1:
  sætninger1
 case vaerdi2:
  sætninger2
 ...
 default:
  sætningerN
}

eller
switch (udtryk) {
 case vaerdi1:
  sætninger1; break
 case vaerdi2:
  sætninger2; break
 ...
 default:
  sætningerN }
default er valgfri, hvis den er med udføres sætningerN når (hvis) den når så langt.
break hører formelt set ikke med men bruges ofte, det får udførelsen af switch-forgreningen til at stoppe.
Ved gennemløbet sammenlignes udtryk først med vaerdi1 (som evt. kan være et nyt udtryk), er de ens udføres sætninger1, og hvis der ikke hører break med fortsættes med vaerdi2 osv.
default: SætningerN udføres i alle fald, hvis forgreningen altså ikke forinden er stoppet med break.
for (var i=0; i<10; i++) {switch(i){
   case 0 :document.write('Søndag'+i)
   case 0 :document.write(' i dag'+i)
   case 4 :document.write(' torsdag'+i)
   case 3 :document.write(' onsdag'+i)
   defalut:document.write(' * '+i)
}}
document.write('<br>--------------------<br>')
for (var i=0; i<10; i++) {switch(i){
case 0 : document.write('Søndag'+i);break
case 0 : document.write(' i dag'+i);break;
case 4 : document.write(' torsdag'+i);break;
case 3 : document.write(' onsdag'+i);break;
defalut: document.write(' * '+i+'* ');
}}

Ovenstående opførsel af 'switch'-forgreningen er overraskende, og ikke i overensstemmelse med Netscape's dokumentation. Hvis man ikke bruger "default:" og værdien efter alle case er forskellig, er opførslen OK.
Der står ikke noget i dok. om hvad der sker hvis man udelader break; men al erfaring viser, at så udføres alle de følgende forgreninger også, selvom det ikke var meningen.
 default udføres hvis Rækkefølge af de to case 0, kaldet 1 og 2
Efter dokumentationenDefault udføres kun hvis ingen af case-forgreningerne udføres 1 udføres, break; forhindrer 2
Netscape ver. 4.7
og 6 preview release 2
Default udføres kun hvis break; mangler og mindst én af case-forgreningerne udføres  Kun 2 udføres
Firefox ver. 3.5.7 Default udføres kun hvis break; mangler og mindst én af case-forgreningerne udføres 1 udføres, break; forhindrer 2
I. Explorer ver. 4 Default udføres kun hvis mindst én af case-forgreningerne udføres  1 udføres, break; forhindrer 2
Konklusion: switch kan bruges hvis man husker break;  , men dens default-gren er ubrugelig !
 
with (objekt)
  {sætninger}
I sætninger kan det objektet ejer refereres uden at man behøver skrive objektets navn (ren dovenskab).

var d = new(Date);
function getFullYear(){
  return "Jeg er den forkerte getFullYear()"
}
document.write(getFullYear()+'<br>');
with (d) {
  document.write(getFullYear())+'<br>');}
Her bruges metoden getFullYear(), som er en metode ejet af objekter af typen Date. Indenfor with slipper man for  d.  i  d.getFullYear(), og objektets metode kommer forud for evt. andre med samme navn.
for (a;b;c){
...
continue
...}

while (c) {...
continue
...}

(en løkke){...
:c ...
continue c;
...}
 
continue laver et hop i programudførelslen,
til c i de 3 tilfælde til venstre.
(en løkke) {
...
break;
...}

break laver et hop ud af løkken.
Den blev brugt ovenfor i forbindelse med switch.
try {
  sætninger1 - som kan give fejl
}
catch (fejlinfo) {
sætninger2 -
udføres kun hvis der opstod fejl i sætninger1
}
finally { // valgfri
sætninger3 -
udføres uanset om der var fejl i sætninger1 eller ej
}
Fejlfanger: Ved fejl erstattes den almindelige fejlprocedure med sætninger2
I catch-blokken har man en streng med en kort beskrivelse af fejlen. Eks:
try { document.write("lykken er "+lykken)} // fejl: lykken er ikke defineret
catch(fejl){ document.write(" catch fangede "+fejl)}
finally { document.write(" finally udført")}
Din browser skriver:
Opera skrivercatch fangede [Error: name: ReferenceError message: Statement on line 2: Undefined variable: lykken ] finally udført
Firefox skrivercatch fangede ReferenceError: lykken is not defined finally udført
I. explorer skrivercatch fangede [object Error] finally udført
Chrome skrivercatch fangede ReferenceError: lykken is not defined finally udført
Netscape skriver ingenting til skærmen og i fejlkoncollen bl.a: "line 10: try is a reserved identifier." Da der nu er fejl i scriptet bliver det ikke udført og desuden "sortlistet", der opstår fejl hvis man kalder funktioner og variable i scriptet
   I stedet for try bruger jeg hellere windows-attributten onerror som beskrevet  :    
throw "fejlmeddel" Fejlmager, simulerer en fejl med fejlmeddelelse "fejlmeddel" Virker ikke med Netscape
    :  Til toppen af siden