8. februar 2026

"switch" udtryk

Et switch udtryk kan erstatte flere if-kontroller.

Det giver en mere beskrivende måde at sammenligne en værdi med flere varianter på.

Syntaksen

switch har en eller flere case blokke og en valgfri default.

Det ser sådan ud:

switch(x) {
  case 'value1':  // if (x === 'value1')
    ...
    [break]

  case 'value2':  // if (x === 'value2')
    ...
    [break]

  default:
    ...
    [break]
}
  • Værdien af x bliver tjekket for streng lighed med værdien fra den første case (det vil sige value1), derefter den anden (value2) og så videre.
  • Hvis ligheden findes, starter switch med at udføre koden fra den tilsvarende case, indtil den nærmeste break (eller indtil slutningen af switch).
  • Hvis ingen case matcher, bliver default koden udført (hvis den findes).

Et eksempel

Et eksempel på switch (den udførte kode er fremhævet):

let a = 2 + 2;

switch (a) {
  case 3:
    alert( 'For lille' );
    break;
  case 4:
    alert( 'Præcis!' );
    break;
  case 5:
    alert( 'For stort' );
    break;
  default:
    alert( "Jeg kender ikke sådanne værdier" );
}

Her starter switch med at sammenligne a med den første case variant, som er 3. Matchen fejler.

4. Det er et match, så udførelsen starter fra case 4 indtil den nærmeste break.

Hvis der ikke er nogen break, fortsætter udførelsen med den næste case uden nogen kontrol.

Et eksempel uden break:

let a = 2 + 2;

switch (a) {
  case 3:
    alert( 'For lille' );
  case 4:
    alert( 'Præcis!' );
  case 5:
    alert( 'For stort' );
  default:
    alert( "Jeg kender ikke sådanne værdier" );
}

I eksemplet ovenfor vil vi se sekventiel udførelse af tre alert:

alert( 'Præcis!' );
alert( 'For stort' );
alert( "Jeg kender ikke sådanne værdier" );
Alle udtryk kan være et switch/case argument

Både switch og case tillader vilkårlige udtryk.

For eksempel:

let a = "1";
let b = 0;

switch (+a) {
  case b + 1:
    alert("dette kører, fordi +a er 1, som præcis svarer til b+1");
    break;

  default:
    alert("dette kører ikke");
}

+a giver 1, som sammenlignes med b + 1 i case, og den tilsvarende kode udføres.

Gruppering af “case”

Flere varianter af case, som deler den samme kode, kan grupperes.

For eksempel, hvis vi ønsker at den samme kode skal køre for case 3 og case 5:

let a = 3;

switch (a) {
  case 4:
    alert('Rigtigt!');
    break;

  case 3: // (*) grouped two cases
  case 5:
    alert('Forkert!');
    alert("Hvorfor tager du ikke et matematikhold?");
    break;

  default:
    alert('Resultatet er mærkeligt. Virkelig?!');
}

Nu vil både 3 og 5 vise den samme besked.

Muligheden for at “gruppere” cases er en bivirkning af, hvordan switch/case fungerer uden break. Her starter udførelsen af case 3 fra linjen (*) og fortsætter gennem case 5, fordi der ikke er noget break.

Datatype betyder noget

Lad os understrege, at lighedstjekket altid er strengt. Værdierne skal være af samme type for at matche.

For eksempel, lad os se på koden:

let arg = prompt("Indtast en værdi?");
switch (arg) {
  case '0':
  case '1':
    alert( 'Et eller nul' );
    break;

  case '2':
    alert( 'To' );
    break;

  case 3:
    alert( 'Kører aldrig!' );
    break;
  default:
    alert( 'En ukendt værdi' );
}
  1. For 0, 1, kører den første alert.
  2. For 2 kører den anden alert.
  3. Men for 3 er resultatet af prompt en streng "3", som ikke er strengt lig med === tallet 3. Så vi har død kode i case 3! default varianten vil blive udført.

Opgaver

vigtighed: 5

Skriv koden ved hjælp af if..else, som svarer til følgende switch:

switch (browser) {
  case 'Edge':
    alert( "Du bruger Edge!" );
    break;

  case 'Chrome':
  case 'Firefox':
  case 'Safari':
  case 'Opera':
    alert( 'Okay vi understøtter også disse browsere' );
    break;

  default:
    alert( 'Vi håber, at denne side ser godt ud!' );
}

For at matche funktionaliteten af switch præcist, skal if bruge en streng sammenligning '==='.

For givne strenge fungerer en simpel '==' dog også.

if(browser == 'Edge') {
  alert("Du bruger Edge!");
} else if (browser == 'Chrome'
 || browser == 'Firefox'
 || browser == 'Safari'
 || browser == 'Opera') {
  alert( 'Okay vi understøtter også disse browsere' );
} else {
  alert( 'Vi håber, at denne side ser godt ud!' );
}

Bemærk: konstruktionen browser == 'Chrome' || browser == 'Firefox' … er opdelt i flere linjer for bedre læsbarhed.

Men switch konstruktionen er stadig renere og mere beskrivende.

vigtighed: 4

Skriv koden nedenfor ved hjælp af en enkelt switch erklæring:

let a = +prompt('a?', '');

if (a == 0) {
  alert( 0 );
}
if (a == 1) {
  alert( 1 );
}

if (a == 2 || a == 3) {
  alert( '2,3' );
}

De første to tjek bliver til to case. Det tredje tjek er opdelt i to cases:

let a = +prompt('a?', '');

switch (a) {
  case 0:
    alert( 0 );
    break;

  case 1:
    alert( 1 );
    break;

  case 2:
  case 3:
    alert( '2,3' );
    break;
}

Bemærk: break nederst er ikke påkrævet. Men vi sætter det for at gøre koden fremtidssikret.

I fremtiden er der en chance for, at du vil tilføje en mere case, for eksempel case 4. Og hvis du glemmer at tilføje et break før det, i slutningen af case 3, vil der opstå en fejl. Så det er en form for sikkerhed mod fejl i fremtiden.

Tutorial-oversigt

Kommentarer

læs dette før du kommenterer…
  • Hvis du har forslag til forbedringer - så opret venligst et GitHub-issue eller en pull request i stedet for at kommentere.
  • Hvis du ikke forstår noget i artiklen - så uddyb venligst.
  • For at indsætte få ord kode, brug <code>-taggen, for flere linjer - omslut dem i <pre>-tag, for mere end 10 linjer - brug en sandbox (plnkr, jsbin, codepen…)