This article is currently in the process of being translated into Dutch (~99% done).
The switch statement
De switch-instructie is als een reeks if-instructies, die allemaal dezelfde variabele controleren, maar met een andere actie voor elke mogelijke waarde. Het klinkt misschien ingewikkeld, maar dat is het niet. Kijk maar eens naar dit eenvoudige voorbeeld:
let answer = prompt("Do you like JavaScript?");
switch(answer)
{
case "yes":
alert("That's great!");
break;
case "no":
alert("Sorry to hear that!");
break;
case "maybe":
alert("I'll ask again later...");
break;
}
In de eerste regel stellen we een vraag. Vervolgens gebruiken we de "answer" variabele als voorwaarde voor de switch-instructie. Binnen de switch-instructie definiëren we meerdere mogelijke waarden om te vergelijken met de "answer"variabele (yes, no of maybe ), met behulp van het sleutelwoord case. Elke actie resulteert in een andere waarschuwing.
Het sleutelwoord "break"
Let op het sleutelwoord break dat aan het einde van elke case wordt gebruikt. Een switch-instructie vereist dat je elke case op de juiste manier afsluit, ofwel door het sleutelwoord break te gebruiken, of in het geval dat je in een functie zit, door het sleutelwoord return te gebruiken om de functie volledig af te sluiten. Als je dit weglaat, zal de uitvoering doorgaan naar alle cases onder degene die overeenkomt met de waarde. Je kunt dit eenvoudig testen door de break sleutelwoorden uit het bovenstaande voorbeeld te verwijderen en het voorbeeld opnieuw uit te voeren.
Je kunt het laatste break sleutelwoord weglaten, omdat het switch statement daar eindigt, wat er ook gebeurt, maar dit is niet waar voor alle programmeertalen, dus voor consistentie hebben veel programmeurs de neiging om het altijd in te voegen voor alle gevallen.
Case groepen
Soms wil je dat meerdere cases dezelfde actie uitvoeren. Geen probleem, want je kunt gewoon evenveel case statements op elkaar stapelen, zodat ze dezelfde code gebruiken. Hier is een voorbeeld:
let answer = prompt("Do you like JavaScript?");
switch(answer)
{
case "yes":
alert("That's great!");
break;
case "no":
case "nope":
case "nay":
case "nix":
alert("Sorry to hear that!");
break;
case "maybe":
alert("I'll ask again later...");
break;
}
Zoals je kunt zien, hebben we nu een hele lijst met opties voor het "nee"-gedeelte van de switch-instructie, met verschillende variaties van deze negatieve respons die allemaal hetzelfde bericht opleveren.
Het vooringestelde ( default ) sleutelwoord
Het bovenstaande voorbeeld heeft een duidelijke fout: als de gebruiker niet de exacte waarde invoert die overeenkomt met een van de cases, gebeurt er niets. Voor een situatie als deze is het handig om een terugvalactie te hebben - iets dat wordt uitgevoerd als geen van de andere opties relevant is. Gelukkig kunnen we dat met JavaScript doen door het sleutelwoord default te gebruiken. Hier is een aangepaste versie van het bovenstaande voorbeeld waarin we dit toevoegen:
let answer = prompt("Do you like JavaScript?");
switch(answer)
{
case "yes":
alert("That's great!");
break;
case "no":
alert("Sorry to hear that!");
break;
case "maybe":
alert("I'll ask again later...");
break;
default:
alert("Please enter 'yes', 'no' or 'maybe'...");
break;
}
Met dit op zijn plaats kan onze switch-instructie alle situaties aan, omdat we een fallback-actie hebben via het default sleutelwoord.
Case comparison
Iets anders waar we rekening mee moeten houden als het bovenstaande voorbeeld in een echt scenario zou worden gebruikt, is hoe elke case wordt vergeleken met de voorwaarde. We controleren bijvoorbeeld op " yes", maar strings worden altijd hoofdlettergevoelig vergeleken, dus als de gebruiker in plaats daarvan "Yes", "YeS" of "YES" schreef, zou onze eerste case niet overeenkomen. We moeten hier altijd mee omgaan, bijvoorbeeld door het antwoord te converteren naar kleine letters voordat we het controleren:
let answer = prompt("Do you like JavaScript?");
switch(answer.toLowerCase())
{
case "yes":
alert("That's great!");
break;
...
Iets anders waar je rekening mee moet houden is het feit dat alle vergelijkingen worden gedaan met behulp van de strikte gelijkheidsvergelijker (===). Dit betekent dat als je expressie in het switch statement een tekenreeks is, je deze alleen kunt vergelijken met een andere tekenreeks, zelfs als je weet dat deze tekenreeks in feite een getal is.
Sta me toe dit te illustreren met een voorbeeld:
let answer = prompt("41 or 42?");
switch(answer)
{
case 41:
alert("41? Really??");
break;
case 42:
alert("42 - of course!");
break;
default:
alert("Unknown answer...");
break;
}
Dit voorbeeld zal NIET werken zoals verwacht. Waarom? Omdat het resultaat van prompt() een tekststring is (zelfs als de gebruiker een numerieke waarde invoert), maar wij vergelijken het met getallen (41 of 42). Je zult dit moeten aanpakken, bijvoorbeeld door het antwoord in een getal te veranderen voordat je het controleert, of door het in plaats daarvan met tekenreeksen te vergelijken. Laten we de eerste regel van het voorbeeld veranderen en de functie Number() gebruiken om het resultaat van de functie prompt() in een getal te veranderen:
let answer = Number(prompt("41 or 42?"));
switch(answer)
{
case 41:
alert("41? Really??");
break;
case 42:
alert("42 - of course!");
break;
default:
alert("Unknown answer...");
break;
}
Samenvatting
Met het switch statement kun je een expressie vergelijken met meerdere keuzes en op basis daarvan een actie uitvoeren, een beetje zoals een reeks if..else..if statements, maar dan in een leesbaarder formaat. Onthoud dat het switch statement een strikte gelijkheidsvergelijking gebruikt.