Nullish coalescing operator skrives som to spørgsmålstegn ??.
Da det behandler null og undefined på ens, bruger vi et særligt udtryk her i denne artikel. For korthedens skyld siger vi, at en værdi er “defineret”, når den hverken er null eller undefined.
Resultatet af a ?? b er:
- hvis
aer defineret, så er resultateta, - hvis
aikke er defineret, så er resultatetb.
Med andre ord, ?? returnerer det første argument, hvis det ikke er null/undefined. Ellers returneres det andet argument.
Nullish coalescing operator er ikke noget helt nyt. Det er bare en pæn syntaks for at få den første “definerede” værdi af de to.
Vi kan omskrive result = a ?? b ved hjælp af de operatorer, vi allerede kender, som dette:
result = (a !== null && a !== undefined) ? a : b;
Her bør det nu være helt klart, hvad ?? gør. Lad os se, hvor det hjælper.
Den almindelige brug af ?? er at give en standardværdi.
For eksempel viser vi her user, hvis dens værdi ikke er null/undefined, ellers Anonymous:
let user;
alert(user ?? "Anonymous"); // Anonymous (user is undefined)
Her er eksemplet med user tildelt et navn:
let user = "John";
alert(user ?? "Anonymous"); // John (user is not null/undefined)
Vi kan også bruge en sekvens af ?? til at vælge den første værdi fra en liste, der ikke er null/undefined.
Lad os sige, at vi har en brugers data i variablerne firstName, lastName eller nickName. Alle kan være ikke definerede, hvis brugeren besluttede ikke at udfylde de tilsvarende værdier.
Vi vil gerne vise brugernavnet ved hjælp af en af disse variabler, eller vise “Anonymous”, hvis alle er null/undefined.
Lad os bruge ?? operatoren til det:
let firstName = null;
let lastName = null;
let nickName = "Supercoder";
// shows the first defined value:
alert(firstName ?? lastName ?? nickName ?? "Anonymous"); // Supercoder
Comparison with ||
OR || operatoren kan bruges på samme måde som ??, som det blev beskrevet i forrige kapitel.
For eksempel kunne vi i koden ovenfor erstatte ?? med || og stadig få det samme resultat:
let firstName = null;
let lastName = null;
let nickName = "Supercoder";
// shows the first truthy value:
alert(firstName || lastName || nickName || "Anonymous"); // Supercoder
Historisk set var OR || operatoren der først. Den har været der siden begyndelsen af JavaScript, så udviklere har brugt den til sådanne formål i lang tid.
På den anden side blev nullish coalescing operator ?? tilføjet til JavaScript først for nylig, og grunden til det var, at folk ikke var helt tilfredse med