Opas JavaScriptin nullish coalescing -operaattoriin (??). Käsittelemme oletusarvojen asettamista, eroa TAI-operaattoriin (||) ja falsy-arvojen hallintaa.
JavaScriptin Nullish Coalescing: Oletusarvojen asettamisen hallinta
Nykyaikaisessa JavaScript-kehityksessä null- ja undefined-arvojen sulava käsittely on ratkaisevan tärkeää vankemman ja ennustettavamman koodin kirjoittamiseksi. Nullish coalescing -operaattori (??
), joka esiteltiin ES2020:ssa, tarjoaa tiiviin ja tehokkaan tavan asettaa oletusarvoja erityisesti silloin, kun muuttuja on null
tai undefined
. Tämä blogikirjoitus tutkii nullish coalescing -operaattorin vivahteita, vertaa sitä TAI-operaattoriin (||
) ja havainnollistaa sen etuja käytännön esimerkeillä, jotka soveltuvat monenlaisiin koodaustilanteisiin.
Nullish-arvojen ymmärtäminen: null
ja undefined
Ennen nullish coalescing -operaattoriin syventymistä on tärkeää ymmärtää ero null
in ja undefined
in välillä JavaScriptissä. Molemmat edustavat arvon puuttumista, mutta ne syntyvät eri olosuhteissa.
null
: Edustaa arvon tarkoituksellista puuttumista. Ohjelmoija tyypillisesti asettaa sen osoittamaan, että muuttujalla ei tällä hetkellä ole arvoa tai että ominaisuus puuttuu.undefined
: Osoittaa, että muuttuja on määritelty, mutta sille ei ole vielä asetettu arvoa. Se voi myös ilmetä, kun käytetään objektin olematonta ominaisuutta tai kun funktio ei erikseen palauta arvoa.
Tämän eron ymmärtäminen on ratkaisevan tärkeää, koska nullish coalescing -operaattori kohdistuu nimenomaan näihin kahteen arvoon.
Esittelyssä Nullish Coalescing -operaattori (??
)
Nullish coalescing -operaattori (??
) on looginen operaattori, joka palauttaa oikeanpuoleisen operandinsa, kun sen vasemmanpuoleinen operandi on null
tai undefined
. Muussa tapauksessa se palauttaa vasemmanpuoleisen operandinsa. Sen syntaksi on yksinkertainen:
const result = value ?? defaultValue;
Tässä lausekkeessa, jos value
on null
tai undefined
, result
saa arvokseen defaultValue
n. Muussa tapauksessa result
saa arvokseen value
n.
Käytännön esimerkkejä Nullish Coalescingista
Havainnollistetaan nullish coalescing -operaattorin käyttöä muutamalla käytännön esimerkillä:
1. Käyttäjän oletusasetusten asettaminen
Kuvittele, että rakennat verkkosovellusta, jossa käyttäjät voivat mukauttaa asetuksiaan. Voit tallentaa nämä asetukset käyttäjäprofiiliobjektiin. Jos käyttäjä ei ole erikseen asettanut asetusta, voit käyttää nullish coalescing -operaattoria antaaksesi oletusarvon.
const userProfile = {
username: "johnDoe",
theme: null // Käyttäjä ei ole vielä valinnut teemaa
};
const theme = userProfile.theme ?? "light"; // Oletuksena vaalea teema
console.log(theme); // Tuloste: "light"
Tässä esimerkissä, koska userProfile.theme
on null
, theme
-muuttujalle annetaan oletusarvo "light". Jos käyttäjä olisi asettanut teeman, esimerkiksi userProfile.theme = "dark";
, niin theme
-muuttuja saisi arvon "dark".
2. Puuttuvien API-tietojen käsittely
Noudettaessa dataa API:sta on yleistä kohdata puuttuvia tai epätäydellisiä tietoja. Nullish coalescing -operaattoria voidaan käyttää antamaan oletusarvoja puuttuville ominaisuuksille.
const apiResponse = {
data: {
productName: "Example Product",
description: undefined // Kuvausta ei annettu
}
};
const description = apiResponse.data.description ?? "Kuvausta ei saatavilla.";
console.log(description); // Tuloste: "Kuvausta ei saatavilla."
Tässä apiResponse.data.description
on undefined
, joten description
-muuttujalle annetaan oletusviesti "Kuvausta ei saatavilla."
3. Sovellusasetusten määrittäminen
Konfiguraatiotiedostoissa tietyt asetukset voivat olla valinnaisia. Voit käyttää nullish coalescing -operaattoria varmistaaksesi, että sovelluksesi käyttää järkeviä oletusarvoja, jos näitä asetuksia ei ole erikseen määritelty.
const config = {
apiUrl: "https://example.com/api",
timeout: null // Aikakatkaisua ei määritelty
};
const timeout = config.timeout ?? 5000; // Oletusaikakatkaisu 5000ms
console.log(timeout); // Tuloste: 5000
Tässä tapauksessa, koska config.timeout
on null
, timeout
-muuttujalle asetetaan oletusarvoksi 5000 millisekuntia.
Nullish Coalescing vs. TAI-operaattori (||
): Ratkaiseva ero
On tärkeää ymmärtää ero nullish coalescing -operaattorin (??
) ja TAI-operaattorin (||
) välillä. Vaikka molempia voidaan käyttää oletusarvojen asettamiseen, ne käyttäytyvät eri tavalla kohdatessaan falsy-arvoja.
TAI-operaattori (||
) palauttaa oikeanpuoleisen operandinsa, kun sen vasemmanpuoleinen operandi on mikä tahansa falsy-arvo. JavaScriptin falsy-arvoja ovat:
null
undefined
0
(nolla)NaN
(Ei numero)''
(tyhjä merkkijono)false
Nullish coalescing -operaattori (??
) *vain* palauttaa oikeanpuoleisen operandinsa, kun sen vasemmanpuoleinen operandi on null
tai undefined
. Se ei ota huomioon muita falsy-arvoja.
Eron havainnollistaminen esimerkeillä
Tarkastellaan tilannetta, jossa haluamme antaa oletusarvon muuttujalle, joka saattaa olla nolla.
const quantity = 0;
// Käytetään TAI-operaattoria
const quantityOR = quantity || 1; // Oletusarvona 1, jos määrä on falsy
console.log(quantityOR); // Tuloste: 1 (virheellinen, koska 0 on falsy)
// Käytetään nullish coalescing -operaattoria
const quantityNullish = quantity ?? 1; // Oletusarvona 1 vain, jos määrä on null tai undefined
console.log(quantityNullish); // Tuloste: 0 (oikein, koska 0 ei ole null tai undefined)
Tässä esimerkissä TAI-operaattori asettaa virheellisesti oletusarvoksi 1, koska 0 on falsy-arvo. Nullish coalescing -operaattori sen sijaan säilyttää oikein arvon 0, koska se tarkistaa vain null
in tai undefined
in varalta.
Toinen yleinen skenaario on tyhjien merkkijonojen käsittely. Oletetaan, että haluat näyttää käyttäjän nimen, mutta jos nimeä ei ole annettu, haluat näyttää oletusviestin.
const userName = ""; // Käyttäjä ei ole antanut nimeä
// Käytetään TAI-operaattoria
const displayNameOR = userName || "Vieras";
console.log(displayNameOR); // Tuloste: "Vieras" (virheellinen, koska "" on falsy)
// Käytetään nullish coalescing -operaattoria
const displayNameNullish = userName ?? "Vieras";
console.log(displayNameNullish); // Tuloste: "" (virheellinen, mutta lähempänä haluttua toimintaa)
Vaikka nullish coalescing -operaattori ei täydellisesti ratkaise tyhjän merkkijonon tapausta (koska se palauttaa edelleen tyhjän merkkijonon), se korostaa eron ymmärtämisen tärkeyttä ??
:n ja ||
:n välillä. Jos haluat *erityisesti* käsitellä tyhjiä merkkijonoja vastaavina kuin null/undefined, tarvitset todennäköisesti eksplisiittisen tarkistuksen: const displayName = userName === null || userName === undefined || userName === '' ? 'Vieras' : userName;
. ??
-operaattori kuitenkin estää odottamattoman käyttäytymisen arvoilla kuten `0` tai `false`.
Parhaat käytännöt ja huomiot
Kun käytät nullish coalescing -operaattoria, ota huomioon seuraavat parhaat käytännöt:
- Käytä sitä, kun haluat erityisesti antaa oletusarvon
null
ille taiundefined
ille. Vältä sen käyttöä yleiskäyttöisenä oletusarvon asetusoperaattorina. - Ole tietoinen falsy-arvoista. Ymmärrä ero
??
:n ja||
:n välillä ja valitse operaattori, joka parhaiten sopii tarpeisiisi. - Yhdistä se valinnaiseen ketjutukseen (
?.
) turvallista ominaisuuksien käyttöä varten. Tämä mahdollistaa sisäkkäisten ominaisuuksien käytön aiheuttamatta virheitä, jos jokin väliominaisuus onnull
taiundefined
.
Nullish Coalescingin ja valinnaisen ketjutuksen yhdistäminen
Valinnainen ketjutus (?.
) mahdollistaa objektin ominaisuuksien turvallisen käytön, vaikka jotkin väliominaisuudet olisivat null
tai undefined
. Yhdistettynä nullish coalescing -operaattoriin voit antaa oletusarvoja ominaisuuksille, joita ei ehkä ole olemassa.
const user = {
profile: {
address: {
city: null
}
}
};
const city = user.profile?.address?.city ?? "Tuntematon kaupunki";
console.log(city); // Tuloste: "Tuntematon kaupunki"
Tässä esimerkissä, jos joko user.profile
tai user.profile.address
on null
tai undefined
, valinnainen ketjutus estää virheen, ja nullish coalescing -operaattori asettaa oletusarvoksi "Tuntematon kaupunki".
Maailmanlaajuinen soveltaminen: Moninaiset skenaariot eri kulttuureissa
Nullish coalescing -operaattori on yleisesti sovellettavissa. Harkitse kuitenkin, miten tietoa kerätään ja esitetään eri kulttuureissa, kun päätät oletusarvoista. Esimerkiksi:
- Numeroiden muotoilu: Vaikka oletusnumeromuoto voi olla
0.00
joillakin alueilla, toiset käyttävät,
desimaalierottimena. Varmista, että oletusarvosi vastaavat käyttäjien odotettuja kieliasetuksia (lokaaleja). - Päivämäärämuodot: Nollaksi jätetty päivämääräkenttä saattaa oletuksena olla nykyinen päivämäärä. Ole tietoinen kansainvälisten käyttäjiesi yleisistä päivämäärämuodoista (esim. KK/PP/VVVV vs. PP/KK/VVVV).
- Osoitekentät: Osoiterakenteet vaihtelevat merkittävästi maailmanlaajuisesti. Jos osoitekenttä on null, oletusarvo kuten "N/A" voi olla sopiva. Vältä täyttämistä mahdollisesti virheellisillä aluetiedoilla.
- Kieliasetukset: Jos käyttäjän kieliasetus puuttuu, aseta oletukseksi laajalti ymmärretty kieli, kuten englanti, tai käytä selaimen lokaalin tunnistusta (käyttäjän luvalla).
Saavutettavuusnäkökohdat
Kun käytät oletusarvoja, varmista, että sovelluksesi pysyy saavutettavana vammaisille käyttäjille:
- Selkeä viestintä: Jos oletusarvoa käytetään, ilmoita siitä selkeästi käyttäjälle, erityisesti lomakekentissä. Käytä otsikoita ja ARIA-attribuutteja kontekstin tarjoamiseksi.
- Näppäimistöllä navigointi: Varmista, että käyttäjät voivat helposti navigoida ja muokata oletusarvoja näppäimistöllä.
- Ruudunlukijayhteensopivuus: Testaa sovelluksesi ruudunlukijoilla varmistaaksesi, että oletusarvot ilmoitetaan oikein ja ne voidaan ohittaa.
Yhteenveto
Nullish coalescing -operaattori (??
) on arvokas lisä JavaScript-kieleen, joka tarjoaa tiiviin ja luotettavan tavan asettaa oletusarvoja erityisesti silloin, kun muuttuja on null
tai undefined
. Ymmärtämällä sen vivahteet ja vertaamalla sitä TAI-operaattoriin (||
), voit kirjoittaa vankempaa, ennustettavampaa ja ylläpidettävämpää koodia. Muista ottaa huomioon parhaat käytännöt, yhdistää se valinnaiseen ketjutukseen turvallista ominaisuuksien käyttöä varten ja mukauttaa oletusarvosi maailmanlaajuisen yleisön moninaisiin tarpeisiin. Tämän operaattorin hallitseminen parantaa epäilemättä JavaScript-kehitystaitojasi ja auttaa luomaan parempia ohjelmistokokemuksia käyttäjille maailmanlaajuisesti.