Nederlands

Beheers de nullish coalescing-operator (??) van JavaScript voor schonere en efficiëntere toewijzing van standaardwaarden. Leer hoe deze verschilt van de OR-operator (||) en bekijk praktische voorbeelden.

JavaScript Nullish Coalescing: Een Uitgebreide Gids voor het Toewijzen van Standaardwaarden

In JavaScript is het toewijzen van standaardwaarden een veelvoorkomende taak. Traditioneel hebben ontwikkelaars de OR-operator (||) voor dit doel gebruikt. De nullish coalescing-operator (??), geïntroduceerd in ECMAScript 2020, biedt echter een preciezere en betrouwbaardere manier om standaardwaardetoewijzingen af te handelen, specifiek wanneer het gaat om null- of undefined-waarden. Deze gids biedt een diepgaande kijk op de nullish coalescing-operator, en verkent de syntaxis, het gedrag, de verschillen met de OR-operator en praktische gebruiksscenario's.

Wat is Nullish Coalescing?

De nullish coalescing-operator (??) is een logische operator die zijn rechteroperand retourneert wanneer zijn linkeroperand null of undefined is. Anders retourneert het zijn linkeroperand. Eenvoudig gezegd, het levert alleen een standaardwaarde op wanneer een variabele strikt null of undefined is.

Syntaxis

De syntaxis voor de nullish coalescing-operator is eenvoudig:

linkerOperand ?? rechterOperand

Hier is linkerOperand de variabele of expressie die u wilt controleren op null of undefined, en rechterOperand is de standaardwaarde die u wilt toewijzen als linkerOperand inderdaad null of undefined is.

Voorbeeld

Bekijk het volgende voorbeeld:

const username = null ?? "Guest";
console.log(username); // Output: Guest

const age = undefined ?? 25;
console.log(age); // Output: 25

const city = "London" ?? "Unknown";
console.log(city); // Output: London

In dit voorbeeld krijgt username de standaardwaarde "Guest" toegewezen omdat deze aanvankelijk null is. Op dezelfde manier wordt aan age 25 toegewezen omdat deze begint als undefined. city behoudt echter zijn oorspronkelijke waarde, "London", omdat het noch null, noch undefined is.

Nullish versus Falsy Waarden

Het is cruciaal om het verschil te begrijpen tussen nullish en falsy waarden in JavaScript. Een nullish waarde is ofwel null of undefined. Een falsy waarde is een waarde die als onwaar wordt beschouwd wanneer deze in een Booleaanse context wordt aangetroffen. Falsy waarden zijn onder andere:

Het belangrijkste onderscheid is dat de nullish coalescing-operator alleen controleert op null of undefined, terwijl de OR-operator (||) controleert op elke falsy waarde.

Het Verschil Tussen ?? en ||

De OR-operator (||) is een logische OR-operator die de rechteroperand retourneert als de linkeroperand falsy is. Hoewel deze kan worden gebruikt voor het toewijzen van standaardwaarden, kan dit leiden tot onverwacht gedrag bij het omgaan met waarden zoals 0 of een lege string.

Voorbeeld: De Valkuilen van ||

const quantity = 0 || 10; // We bedoelen een standaard van 10 als de hoeveelheid ontbreekt
console.log(quantity); // Output: 10 (Onverwacht!) omdat 0 falsy is

const text = '' || 'Default Text'; // We bedoelen een standaardtekst als de tekst ontbreekt
console.log(text); // Output: Default Text (Onverwacht!) omdat '' falsy is

In het eerste voorbeeld was het de bedoeling om een standaardhoeveelheid van 10 toe te wijzen alleen als quantity ontbrak (null of undefined). Omdat 0 echter een falsy waarde is, wees de OR-operator ten onrechte de standaardwaarde toe. Op dezelfde manier zorgt de lege string ervoor dat de standaardtekst wordt getoond, zelfs als de string bestaat (maar leeg is).

Gebruik van ?? voor Precisie

Laten we het vorige voorbeeld herschrijven met de nullish coalescing-operator:

const quantity = 0 ?? 10;
console.log(quantity); // Output: 0 (Correct!)

const text = '' ?? 'Default Text';
console.log(text); // Output: '' (Correct!)

Nu is de output zoals verwacht. De nullish coalescing-operator controleert alleen op null of undefined, dus 0 en '' worden behandeld als geldige waarden, en hun oorspronkelijke waarden blijven behouden.

Toepassingen voor Nullish Coalescing

De nullish coalescing-operator is nuttig in verschillende scenario's waar u standaardwaarden moet opgeven alleen wanneer een variabele strikt null of undefined is. Hier zijn enkele veelvoorkomende toepassingen:

1. Omgaan met Optionele Functieparameters

Bij het definiëren van een functie met optionele parameters kunt u de nullish coalescing-operator gebruiken om standaardwaarden te bieden als de parameters niet worden meegegeven.

function greet(name, greeting) {
  const userName = name ?? "User";
  const userGreeting = greeting ?? "Hello";
  console.log(`${userGreeting}, ${userName}!`);
}

greet(); // Output: Hello, User!
greet("Alice"); // Output: Hello, Alice!
greet("Bob", "Greetings"); // Output: Greetings, Bob!

2. Standaard Configuratie-opties Instellen

Wanneer u met configuratieobjecten werkt, kunt u de nullish coalescing-operator gebruiken om ervoor te zorgen dat standaardwaarden worden gebruikt als bepaalde configuratie-opties niet zijn opgegeven.

const config = {
  timeout: 5000,
  retries: 3
};

function fetchData(options) {
  const timeout = options.timeout ?? 10000; // Standaard timeout van 10 seconden
  const retries = options.retries ?? 5; // Standaard 5 pogingen
  console.log(`Timeout: ${timeout}, Retries: ${retries}`);
}

fetchData(config); // Output: Timeout: 5000, Retries: 3
fetchData({}); // Output: Timeout: 10000, Retries: 5
fetchData({timeout:null, retries: undefined}); // Output: Timeout: 10000, Retries: 5

3. Toegang tot Geneste Objecteigenschappen

Bij het benaderen van eigenschappen van geneste objecten kan de nullish coalescing-operator worden gecombineerd met optional chaining (?.) om standaardwaarden te bieden als een van de tussenliggende eigenschappen null of undefined is.

const user = {
  profile: {
    address: {
      city: "New York"
    }
  }
};

const cityName = user?.profile?.address?.city ?? "Unknown";
console.log(cityName); // Output: New York

const unknownUser = {};
const unknownCityName = unknownUser?.profile?.address?.city ?? "Unknown";
console.log(unknownCityName); // Output: Unknown

4. Werken met API's en Externe Data

Bij het ophalen van gegevens uit API's of externe bronnen kan de nullish coalescing-operator worden gebruikt om standaardwaarden te bieden als bepaalde datavelden ontbreken of null- of undefined-waarden hebben. Overweeg het ophalen van gebruikersgegevens uit verschillende regio's. Ga ervan uit dat sommige regio's het veld `country` mogelijk niet in hun gebruikersgegevens opnemen.

async function getUserData(userId) {
  try {
    const response = await fetch(`https://api.example.com/users/${userId}`);
    const data = await response.json();
    const country = data.country ?? "Unknown Country";
    const timezone = data.timezone ?? "UTC";
    console.log(`User is from: ${country}, Timezone: ${timezone}`);
  } catch (error) {
    console.error("Error fetching user data:", error);
  }
}

// Simulatie van verschillende API-reacties:
const userWithCountry = { name: "John", country: "USA", timezone: "EST" };
const userWithoutCountry = { name: "Jane", timezone: "GMT" };

// Om dit te testen, zou je een echte API of een mock fetch nodig hebben.
// Voor demonstratiedoeleinden simuleren we de reacties:
global.fetch = async (url) => {
    if (url.includes("123")) {
        return { json: async () => userWithCountry };
    } else if (url.includes("456")) {
        return { json: async () => userWithoutCountry };
    }
    throw new Error("Unexpected URL");
};

getUserData(123); // Output: User is from: USA, Timezone: EST
getUserData(456); // Output: User is from: Unknown Country, Timezone: GMT

Operatorvoorrang

De nullish coalescing-operator heeft een relatief lage operatorvoorrang. Het is lager dan de OR (||) en AND (&&) operatoren. Daarom is het bij het combineren van de nullish coalescing-operator met andere logische operatoren essentieel om haakjes te gebruiken om de volgorde van bewerkingen expliciet te definiëren. Als u dit niet doet, kan dit leiden tot syntaxisfouten of onverwacht gedrag.

Voorbeeld: Gebruik van Haakjes voor Duidelijkheid

// Zonder haakjes (SyntaxError)
// const result = false || null ?? "Default"; // SyntaxError: Unexpected token '??'

// Met haakjes (Correct)
const result = false || (null ?? "Default");
console.log(result); // Output: Default

const anotherResult = (false || null) ?? "Default";
console.log(anotherResult); // Output: null

In het eerste voorbeeld resulteert het ontbreken van haakjes in een SyntaxError omdat de JavaScript-engine de beoogde volgorde van bewerkingen niet kan bepalen. Door haakjes toe te voegen, vertellen we de engine expliciet om eerst de nullish coalescing-operator te evalueren. Het tweede voorbeeld is geldig; de output is echter anders omdat de `||`-expressie als eerste wordt geëvalueerd.

Browsercompatibiliteit

De nullish coalescing-operator (??) is een relatief nieuwe functie, dus het is cruciaal om rekening te houden met browsercompatibiliteit, vooral als u zich richt op oudere browsers. De meeste moderne browsers ondersteunen de nullish coalescing-operator, waaronder:

Als u oudere browsers moet ondersteunen, kunt u een transpiler zoals Babel gebruiken om uw code om te zetten naar een compatibele versie van JavaScript. Babel zal de ??-operator omzetten in equivalente JavaScript-code die in oudere omgevingen werkt.

Best Practices

Hier zijn enkele best practices voor het effectief gebruiken van de nullish coalescing-operator:

Globale Overwegingen

Bij het ontwikkelen voor een wereldwijd publiek, overweeg de volgende punten met betrekking tot het toewijzen van standaardwaarden:

Voorbeeld: Lokalisatie met Nullish Coalescing

Stel dat u een standaard welkomstbericht wilt weergeven in verschillende talen op basis van de landinstelling van de gebruiker. U kunt de nullish coalescing-operator gebruiken om een standaardbericht te bieden als er geen gelokaliseerd bericht beschikbaar is.

function getWelcomeMessage(locale) {
  const localizedMessages = {
    en: "Welcome!",
    fr: "Bienvenue !",
    de: "Willkommen!"
  };

  const message = localizedMessages[locale] ?? "Welcome!"; // Val terug op Engels als de landinstelling niet wordt gevonden
  return message;
}

console.log(getWelcomeMessage("fr")); // Output: Bienvenue !
console.log(getWelcomeMessage("es")); // Output: Welcome! (Valt terug op Engels)

Conclusie

De nullish coalescing-operator (??) is een waardevolle toevoeging aan de JavaScript-taal. Het biedt een preciezere en betrouwbaardere manier om standaardwaarden toe te wijzen in vergelijking met de OR-operator (||), vooral bij het omgaan met waarden zoals 0 of lege strings. Door de syntaxis, het gedrag en de toepassingen ervan te begrijpen, kunt u schonere, beter onderhoudbare code schrijven die standaardwaardetoewijzingen nauwkeurig afhandelt. Denk eraan om rekening te houden met browsercompatibiliteit, operatorvoorrang en globale overwegingen bij het gebruik van de nullish coalescing-operator in uw projecten.

Door de best practices in deze gids te volgen, kunt u de nullish coalescing-operator effectief benutten om de kwaliteit en betrouwbaarheid van uw JavaScript-code te verbeteren, waardoor deze robuuster en gemakkelijker te begrijpen wordt. Onthoud dat u altijd prioriteit moet geven aan duidelijkheid en onderhoudbaarheid in uw code, en de nullish coalescing-operator kan een krachtig hulpmiddel zijn om deze doelen te bereiken.