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 dokumentationen | Default 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.
|