8. februar 2026

Betinget forgrening: if, '?'

Nogle gange har vi brug for at udføre forskellige handlinger baseret på forskellige betingelser.

For at gøre det kan vi bruge if-udtrykket og den betingede operator ?, som også kaldes “spørgsmålstegn”-operatoren.

“if”-udtrykket

if(...)-udtrykket evaluerer en betingelse i parenteserne, og hvis resultatet er true, udfører det en kodeblok.

For eksempel:

let year = prompt('I hvilket år blev ECMAScript-2015-specifikationen udgivet?', '');

if (year == 2015) alert( 'Du har ret!' );

I eksemplet ovenfor er betingelsen en simpel lighedstest (year == 2015), men den kan være meget mere kompleks.

Hvis vi vil udføre mere end én sætning, skal vi pakke vores kodeblok ind i krøllede parenteser:

if (year == 2015) {
  alert( "Det er korrekt!" );
  alert( "Du er så klog!" );
}

Vi anbefaler at pakke din kodeblok ind i krøllede parenteser {} hver gang du bruger en if-sætning, selvom der kun er én sætning at udføre. Det forbedrer læsbarheden.

Boolean-konvertering

if (…)-sætningen evaluerer udtrykket i sine parenteser og konverterer resultatet til en boolean.

Lad os huske konverteringsreglerne fra kapitlet Konvertering mellem datatyper:

  • Et tal 0, en tom streng "", null, undefined og NaN bliver alle til false. Derfor kaldes de “falsy” værdier.
  • Andre værdier bliver til true, så de kaldes “truthy”.

Så koden under denne betingelse vil aldrig blive udført:

if (0) { // 0 is falsy
  ...
}

…og inde i denne betingelse – det vil den altid gøre:

if (1) { // 1 is truthy
  ...
}

Vi kan også give en forud-evalueret boolean værdi til if, sådan her:

let cond = (year == 2015); // equality evaluates to true or false

if (cond) {
  ...
}

“else”-ledet

Et if-udtryk kan indeholde et valgfrit else-led. Det udføres, når betingelsen er falsk.

For eksempel:

let year = prompt('I hvilket år blev ECMAScript-2015-specifikationen udgivet?', '');

if (year == 2015) {
  alert( 'Du har ret!' );
} else {
  alert( 'Hvordan kan du tage så fejl?' ); // any value except 2015
}

Flere betingelser: “else if”

Nogle gange vil vi gerne teste flere varianter af en betingelse. else if-leddet lader os gøre det.

For eksempel:

let year = prompt('I hvilket år blev ECMAScript-2015-specifikationen udgivet?', '');

if (year < 2015) {
  alert( 'For tidligt...' );
} else if (year > 2015) {
  alert( 'For sent' );
} else {
  alert( 'Præcis!' );
}

I koden ovenfor tjekker JavaScript først year < 2015. Hvis det er falsk, går det videre til den næste betingelse year > 2015. Hvis det også er falsk, viser det den sidste alert.

Der kan være flere else if-blokke. Det sidste else er valgfrit.

Den betingede operator ‘?’

Nogle gange har vi brug for at tildele en variabel afhængigt af en betingelse.

For eksempel:

let accessAllowed;
let age = prompt('Hvor gammel er du?', '');

if (age > 18) {
  accessAllowed = true;
} else {
  accessAllowed = false;
}

alert(accessAllowed);

Den såkaldte “betingede” eller “spørgsmålstegn” operator lader os gøre det på en kortere og enklere måde.

Operatoren repræsenteres af et spørgsmålstegn ?. Nogle gange kaldes det “ternary”, fordi operatoren har tre operander. Det er faktisk den eneste operator i JavaScript, der har så mange.

Syntaksen er:

let result = condition ? value1 : value2;

Betingelsen condition evalueres: hvis den er sand, returneres value1, ellers returneres value2.

For eksempel:

let accessAllowed = (age > 18) ? true : false;

Teknisk set kan vi udelade parenteserne omkring age > 18. Spørgsmålstegn-operatoren har en lav præcedens, så den udføres efter sammenligningen >.

Dette eksempel vil gøre det samme som det forrige:

// the comparison operator "age > 18" executes first anyway
// (no need to wrap it into parentheses)
let accessAllowed = age > 18 ? true : false;

Men parenteser gør koden mere læsbar, så vi anbefaler at bruge dem.

Bemærk venligst:

I eksemplet ovenfor kan du undgå at bruge spørgsmålstegn-operatoren, fordi sammenligningen i sig selv returnerer true/false:

// det samme
let accessAllowed = age > 18;

Flere ‘?’

En sekvens af spørgsmålstegn-operatorer ? kan returnere en værdi, der afhænger af mere end én betingelse.

For instance:

let age = prompt('age?', 18);

let message = (age < 3) ? 'Hi, baby!' :
  (age < 18) ? 'Hello!' :
  (age < 100) ? 'Greetings!' :
  'What an unusual age!';

alert( message );

Det kan være svært i starten at forstå, hvad der foregår. Men efter et nærmere kig kan vi se, at det blot er en almindelig sekvens af tests:

  1. Det første spørgsmålstegn tjekker, om age < 3.
  2. Hvis det er sandt – returnerer det 'Hi, baby!'. Ellers fortsætter det til udtrykket efter kolon “:”, hvor det tjekker age < 18.
  3. Hvis det er sandt – returnerer det 'Hello!'. Ellers fortsætter det til udtrykket efter det næste kolon “:”, hvor det tjekker age < 100.
  4. Hvis det er sandt – returnerer det 'Greetings!'. Ellers fortsætter det til udtrykket efter det sidste kolon “:”, hvor det returnerer 'What an unusual age!'.

Sådan ser det ud ved brug af if..else:

if (age < 3) {
  message = 'Hi, baby!';
} else if (age < 18) {
  message = 'Hello!';
} else if (age < 100) {
  message = 'Greetings!';
} else {
  message = 'What an unusual age!';
}

Ikke-traditionel brug af ‘?’

Nogle gange bruges spørgsmålstegnet ? som en erstatning for if:

let company = prompt('Hvilket firma skabte JavaScript?', '');

(company == 'Netscape') ?
   alert('Rigtigt!') : alert('Forkert.');

Afhængigt af betingelsen company == 'Netscape' bliver enten det første eller det andet udtryk efter ? udført og viser en alert.

Vi tildeler ikke et resultat til en variabel her. I stedet udfører vi forskellig kode afhængigt af betingelsen.

Det anbefales ikke at bruge spørgsmålstegn-operatoren på denne måde.

Notationen er kortere end den tilsvarende if-sætning, hvilket tiltaler nogle programmører. Men den er mindre læsbar.

Her er den samme kode ved brug af if til sammenligning:

let company = prompt('Hvilket firma skabte JavaScript?', '');

if (company == 'Netscape') {
  alert('Rigtigt!');
} else {
  alert('Forkert.');
}

Vores øjne scanner koden lodret. Kodeblokke, der spænder over flere linjer, er lettere at forstå end en lang, horisontal instruktionssætning.

Formålet med spørgsmålstegn-operatoren ? er at returnere en værdi eller en anden afhængigt af dens betingelse. Brug den præcis til det. Brug if, når du har brug for at udføre forskellige kodegrene.

Opgaver

vigtighed: 5

Vil alert blive vist?

if ("0") {
  alert( 'Hello' );
}

Ja, det vil den.

Enhver streng undtagen en tom (og "0" er ikke tom) bliver til true i en logisk kontekst.

Vi kan køre og tjekke:

if ("0") {
  alert( 'Hello' );
}
vigtighed: 2

Brug if..else-konstruktionen til at skrive koden, som spørger: ‘Hvad er det “officielle” navn på JavaScript?’

Hvis brugeren indtaster “ECMAScript”, skal der vises “Rigtigt!”, ellers – vises: “Ved du det ikke? ECMAScript!”

Demo i nyt vindue

<!DOCTYPE html>
<html>

<body>
  <script>
    'use strict';

    let value = prompt('Hvad er det "officielle" navn på JavaScript?', '');

    if (value == 'ECMAScript') {
      alert('Rigtigt!');
    } else {
      alert("Ved du det ikke? ECMAScript!");
    }
  </script>


</body>

</html>
vigtighed: 2

Brug if..else-konstruktionen til at skrive en kode, som modtager et tal via prompt og derefter, i en alert viser:

  • 1, hvis værdien er større end nul,
  • -1, hvis mindre end nul,
  • 0, er lig med nul.

I denne opgave antager vi, at inputtet altid er et tal.

Demo i nyt vindue

let value = prompt('Type a number', 0);

if (value > 0) {
  alert( 1 );
} else if (value < 0) {
  alert( -1 );
} else {
  alert( 0 );
}
vigtighed: 5

Omskriv denne if ved hjælp af den betingede operator '?':

let result;

if (a + b < 4) {
  result = 'Under';
} else {
  result = 'Over';
}
let result = (a + b < 4) ? 'Under' : 'Over';
vigtighed: 5

Omskriv if..else ved hjælp af flere betingede operatorer '?'.

For læsbarhed anbefales det at opdele koden i flere linjer.

let message;

if (login == 'Ansat') {
  message = 'Hej';
} else if (login == 'Direktør') {
  message = 'Goddag';
} else if (login == '') {
  message = 'Ingen login';
} else {
  message = '';
}
let message = (login == 'Ansat') ? 'Hej' :
  (login == 'Direktør') ? 'Goddag' :
  (login == '') ? 'Ingen login' :
  '';
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…)