En omfattande guide till JavaScripts nullish coalescing-operator (??), som förklarar dess anvÀndning för standardvÀrden och skillnaden mot OR-operatorn (||).
JavaScript Nullish Coalescing: BemÀstra tilldelning av standardvÀrden
I modern JavaScript-utveckling Àr det avgörande att hantera null- och undefined-vÀrden pÄ ett smidigt sÀtt för att skriva robust och förutsÀgbar kod. Nullish coalescing-operatorn (??
), som introducerades i ES2020, erbjuder ett koncist och kraftfullt sÀtt att tilldela standardvÀrden specifikt nÀr en variabel Àr null
eller undefined
. Detta blogginlÀgg utforskar nyanserna hos nullish coalescing-operatorn, jÀmför den med OR-operatorn (||
) och illustrerar dess fördelar med praktiska exempel som Àr tillÀmpliga i olika kodningsscenarier.
FörstÄ nullish-vÀrden: null
och undefined
Innan vi gÄr in pÄ nullish coalescing-operatorn Àr det viktigt att förstÄ skillnaden mellan null
och undefined
i JavaScript. BÄda representerar frÄnvaron av ett vÀrde, men de uppstÄr under olika omstÀndigheter.
null
: Representerar en avsiktlig frÄnvaro av ett vÀrde. Det tilldelas vanligtvis av programmeraren för att indikera att en variabel för nÀrvarande inte har nÄgot vÀrde eller att en egenskap saknas.undefined
: Indikerar att en variabel har deklarerats men Ànnu inte tilldelats ett vÀrde. Det kan ocksÄ uppstÄ vid Ätkomst av en icke-existerande egenskap hos ett objekt eller nÀr en funktion inte explicit returnerar ett vÀrde.
Att förstÄ denna skillnad Àr avgörande eftersom nullish coalescing-operatorn specifikt riktar in sig pÄ dessa tvÄ vÀrden.
Introduktion till Nullish Coalescing-operatorn (??
)
Nullish coalescing-operatorn (??
) Àr en logisk operator som returnerar sin högra operand nÀr dess vÀnstra operand Àr null
eller undefined
. Annars returnerar den sin vÀnstra operand. Syntaxen Àr enkel:
const result = value ?? defaultValue;
I detta uttryck, om value
Ă€r null
eller undefined
, kommer result
att tilldelas vÀrdet av defaultValue
. Annars kommer result
att tilldelas vÀrdet av value
.
Praktiska exempel pÄ Nullish Coalescing
LÄt oss illustrera anvÀndningen av nullish coalescing-operatorn med nÄgra praktiska exempel:
1. Ange standardinstÀllningar för anvÀndare
FörestÀll dig att du bygger en webbapplikation dÀr anvÀndare kan anpassa sina instÀllningar. Du kan lagra dessa instÀllningar i ett anvÀndarprofilobjekt. Om en anvÀndare inte uttryckligen har angett en instÀllning kan du anvÀnda nullish coalescing-operatorn för att tillhandahÄlla ett standardvÀrde.
const userProfile = {
username: "johnDoe",
theme: null // AnvÀndaren har inte valt ett tema Àn
};
const theme = userProfile.theme ?? "light"; // Standard Àr ljust tema
console.log(theme); // Output: "light"
I det hÀr exemplet, eftersom userProfile.theme
Ă€r null
, tilldelas variabeln theme
standardvÀrdet "light". Om anvÀndaren hade angett ett tema, till exempel userProfile.theme = "dark";
, skulle variabeln theme
ha tilldelats vÀrdet "dark".
2. Hantera saknad API-data
NÀr man hÀmtar data frÄn ett API Àr det vanligt att stöta pÄ saknad eller ofullstÀndig data. Nullish coalescing-operatorn kan anvÀndas för att tillhandahÄlla standardvÀrden för saknade egenskaper.
const apiResponse = {
data: {
productName: "Example Product",
description: undefined // Ingen beskrivning angiven
}
};
const description = apiResponse.data.description ?? "Ingen beskrivning tillgÀnglig.";
console.log(description); // Output: "Ingen beskrivning tillgÀnglig."
HÀr Àr apiResponse.data.description
undefined
, sÄ variabeln description
tilldelas standardmeddelandet "Ingen beskrivning tillgÀnglig."
3. Konfigurera applikationsinstÀllningar
I konfigurationsfiler kan vissa instÀllningar vara valfria. Du kan anvÀnda nullish coalescing-operatorn för att sÀkerstÀlla att din applikation anvÀnder rimliga standardvÀrden om dessa instÀllningar inte Àr explicit definierade.
const config = {
apiUrl: "https://example.com/api",
timeout: null // Ingen tidsgrÀns specificerad
};
const timeout = config.timeout ?? 5000; // StandardtidsgrÀns pÄ 5000 ms
console.log(timeout); // Output: 5000
I det hÀr fallet, eftersom config.timeout
Ă€r null
, sÀtts variabeln timeout
till standardvÀrdet 5000 millisekunder.
Nullish Coalescing kontra OR-operatorn (||
): En avgörande skillnad
Det Àr viktigt att förstÄ skillnaden mellan nullish coalescing-operatorn (??
) och OR-operatorn (||
). Ăven om bĂ„da kan anvĂ€ndas för att tilldela standardvĂ€rden, beter de sig olika nĂ€r de stöter pĂ„ falsy-vĂ€rden.
OR-operatorn (||
) returnerar sin högra operand nÀr dess vÀnstra operand Àr vilket falsy-vÀrde som helst. Falsy-vÀrden i JavaScript inkluderar:
null
undefined
0
(noll)NaN
(Not a Number)''
(tom strÀng)false
Nullish coalescing-operatorn (??
) returnerar *endast* sin högra operand nÀr dess vÀnstra operand Àr null
eller undefined
. Den tar inte hÀnsyn till andra falsy-vÀrden.
Illustrera skillnaden med exempel
LÄt oss betrakta ett scenario dÀr vi vill tilldela ett standardvÀrde till en variabel som kan vara noll.
const quantity = 0;
// AnvÀnder OR-operatorn
const quantityOR = quantity || 1; // Standard blir 1 om kvantiteten Àr falsy
console.log(quantityOR); // Output: 1 (felaktigt, eftersom 0 Àr falsy)
// AnvÀnder nullish coalescing-operatorn
const quantityNullish = quantity ?? 1; // Standard blir 1 endast om kvantiteten Àr null eller undefined
console.log(quantityNullish); // Output: 0 (korrekt, eftersom 0 inte Àr null eller undefined)
I det hÀr exemplet tilldelar OR-operatorn felaktigt standardvÀrdet 1 eftersom 0 Àr ett falsy-vÀrde. Nullish coalescing-operatorn bevarar dock korrekt vÀrdet 0 eftersom den endast kontrollerar för null
eller undefined
.
Ett annat vanligt scenario Àr att hantera tomma strÀngar. Anta att du vill visa en anvÀndares namn, men om namnet inte anges vill du visa ett standardmeddelande.
const userName = ""; // AnvÀndaren har inte angett nÄgot namn
// AnvÀnder OR-operatorn
const displayNameOR = userName || "Guest";
console.log(displayNameOR); // Output: "Guest" (felaktigt, eftersom \"\" Àr falsy)
// AnvÀnder nullish coalescing-operatorn
const displayNameNullish = userName ?? "Guest";
console.log(displayNameNullish); // Output: "" (felaktigt, men nÀrmare det önskade beteendet)
Ăven om nullish coalescing-operatorn inte löser fallet med den tomma strĂ€ngen perfekt (eftersom den fortfarande returnerar en tom strĂ€ng), belyser den vikten av att förstĂ„ skillnaden mellan ??
och ||
. Om du *specifikt* vill behandla tomma strÀngar som likvÀrdiga med null/undefined, skulle du troligen behöva en explicit kontroll: const displayName = userName === null || userName === undefined || userName === '' ? 'Guest' : userName;
. ??
-operatorn förhindrar dock ovÀntat beteende med vÀrden som `0` eller `false`.
BÀsta praxis och att tÀnka pÄ
NÀr du anvÀnder nullish coalescing-operatorn, övervÀg följande bÀsta praxis:
- AnvÀnd den nÀr du specifikt vill tillhandahÄlla ett standardvÀrde för
null
ellerundefined
. Undvik att anvÀnda den som en allmÀn operator för tilldelning av standardvÀrden. - Var medveten om falsy-vÀrden. FörstÄ skillnaden mellan
??
och||
, och vÀlj den operator som bÀst passar dina specifika behov. - Kombinera den med optional chaining (
?.
) för sÀker Ätkomst till egenskaper. Detta gör att du kan komma Ät nÀstlade egenskaper utan att orsaka fel om en mellanliggande egenskap Àrnull
ellerundefined
.
Kombinera Nullish Coalescing med Optional Chaining
Optional chaining (?.
) lÄter dig sÀkert komma Ät egenskaper hos ett objekt, Àven om vissa mellanliggande egenskaper Àr null
eller undefined
. NÀr den kombineras med nullish coalescing-operatorn kan du tillhandahÄlla standardvÀrden för egenskaper som kanske inte existerar.
const user = {
profile: {
address: {
city: null
}
}
};
const city = user.profile?.address?.city ?? "OkÀnd stad";
console.log(city); // Output: "OkÀnd stad"
I det hÀr exemplet, om antingen user.profile
eller user.profile.address
Ă€r null
eller undefined
, kommer optional chaining att förhindra ett fel, och nullish coalescing-operatorn kommer att tilldela standardvÀrdet "OkÀnd stad".
Global tillÀmpning: Olika scenarier över kulturer
Nullish coalescing-operatorn Àr universellt tillÀmplig. Men tÀnk pÄ hur data samlas in och representeras i olika kulturer nÀr du bestÀmmer standardvÀrden. Till exempel:
- Talformatering: Medan ett standardtalformat kan vara
0.00
i vissa regioner, anvÀnder andra,
som decimalavskiljare. Se till att dina standardvÀrden överensstÀmmer med förvÀntade anvÀndarlokaler. - Datumformat: Ett datumfÀlt som lÀmnas null kan som standard sÀttas till dagens datum. Var medveten om vanliga datumformat som anvÀnds av dina internationella anvÀndare (t.ex. MM/DD/YYYY vs. DD/MM/YYYY).
- AdressfÀlt: Adressstrukturer varierar avsevÀrt globalt. Om ett adressfÀlt Àr null kan det vara lÀmpligt att ange ett standardvÀrde som "Ej angivet". Undvik att förifylla med potentiellt felaktig regional information.
- SprÄkpreferenser: Om en anvÀndares sprÄkpreferens saknas, anvÀnd ett allmÀnt förstÄtt sprÄk som engelska som standard eller anvÀnd webblÀsarens lokaliseringsdetektering (med anvÀndarens tillstÄnd).
TillgÀnglighetsaspekter
NÀr du anvÀnder standardvÀrden, se till att din applikation förblir tillgÀnglig för anvÀndare med funktionsnedsÀttningar:
- Tydlig kommunikation: Om ett standardvÀrde anvÀnds, indikera detta tydligt för anvÀndaren, sÀrskilt i formulÀrfÀlt. AnvÀnd etiketter och ARIA-attribut för att ge sammanhang.
- Tangentbordsnavigering: Se till att anvÀndare enkelt kan navigera och Àndra standardvÀrden med tangentbordet.
- SkÀrmlÀsarkompatibilitet: Testa din applikation med skÀrmlÀsare för att sÀkerstÀlla att standardvÀrden meddelas korrekt och kan ÄsidosÀttas.
Slutsats
Nullish coalescing-operatorn (??
) Àr ett vÀrdefullt tillskott till JavaScript-sprÄket, som ger ett koncist och tillförlitligt sÀtt att tilldela standardvÀrden specifikt nÀr en variabel Àr null
eller undefined
. Genom att förstÄ dess nyanser och jÀmföra den med OR-operatorn (||
) kan du skriva mer robust, förutsÀgbar och underhÄllbar kod. Kom ihÄg att övervÀga bÀsta praxis, kombinera den med optional chaining för sÀker Ätkomst till egenskaper och anpassa dina standardvÀrden till de olika behoven hos en global publik. Att bemÀstra denna operator kommer utan tvekan att förbÀttra dina JavaScript-utvecklingsfÀrdigheter och bidra till att skapa bÀttre programvaruupplevelser för anvÀndare över hela vÀrlden.