Apgūstiet JavaScript opcionālās ķēdēšanas (?.) operatoru tīrākam, drošākam un robustākam kodam. Uzziniet, kā viegli novērst kļūdas un apstrādāt dziļi ligzdotus objektu īpašumus.
JavaScript opcionālā ķēdēšana: Droša un eleganta piekļuve īpašībām
Navigācija pa sarežģīto, dziļi ligzdoto objektu īpašību tīklu JavaScript valodā bieži vien var šķist kā mīnu lauka šķērsošana. Viena trūkstoša īpašība var izraisīt baiso "Cannot read property 'x' of undefined" kļūdu, pēkšņi apturot jūsu lietojumprogrammu. Tradicionālās metodes, kas ietver aizsargpārbaudes uz null vai undefined vērtībām pirms katras īpašības piekļuves, var radīt gari izvērstu un apgrūtinošu kodu. Par laimi, JavaScript piedāvā elegantāku un kodolīgāku risinājumu: opcionālo ķēdēšanu.
Kas ir opcionālā ķēdēšana?
Opcionālā ķēdēšana, ko apzīmē ar ?.
operatoru, nodrošina veidu, kā piekļūt objektu īpašībām, kas varētu būt null vai undefined, neizraisot kļūdu. Tā vietā, lai izmestu kļūdu, saskaroties ar nullveidīgu (null vai undefined) vērtību ķēdē, tā vienkārši atgriež undefined. Tas ļauj droši piekļūt dziļi ligzdotām īpašībām un graciozi apstrādāt potenciāli trūkstošas vērtības.
Uztveriet to kā drošu navigatoru jūsu objektu struktūrām. Tas ļauj jums "ķēdēt" cauri īpašībām, un, ja kādā brīdī kāda īpašība trūkst (ir null vai undefined), ķēde tiek pārtraukta un atgriež undefined, neizraisot kļūdu.
Kā tas darbojas?
Operators ?.
tiek novietots aiz īpašības nosaukuma. Ja īpašības vērtība pa kreisi no operatora ir null vai undefined, izteiksme nekavējoties tiek novērtēta kā undefined. Pretējā gadījumā piekļuve īpašībai turpinās kā parasti.
Apsveriet šo piemēru:
const user = {
profile: {
address: {
city: "London"
}
}
};
// Bez opcionālās ķēdēšanas tas varētu izmest kļūdu, ja user.profile vai user.profile.address ir undefined
const city = user.profile.address.city; // London
// Ar opcionālo ķēdēšanu mēs varam droši piekļūt pilsētai, pat ja profile vai address trūkst
const citySafe = user?.profile?.address?.city; // London
const userWithoutAddress = {
profile: {},
};
const citySafeUndefined = userWithoutAddress?.profile?.address?.city; // undefined (nav kļūdas)
Pirmajā piemērā gan ar, gan bez opcionālās ķēdēšanas mēs iegūstam "London", jo visas īpašības pastāv.
Otrajā piemērā userWithoutAddress.profile
pastāv, bet userWithoutAddress.profile.address
nepastāv. Bez opcionālās ķēdēšanas, piekļūstot userWithoutAddress.profile.address.city
, rastos kļūda. Ar opcionālo ķēdēšanu mēs iegūstam undefined
bez kļūdas.
Opcionālās ķēdēšanas izmantošanas priekšrocības
- Uzlabota koda lasāmība: Novērš nepieciešamību pēc gari izvērstām null pārbaudēm, padarot jūsu kodu tīrāku un vieglāk saprotamu.
- Samazināts šablona kods: Vienkāršo sarežģītu īpašību piekļuves loģiku, samazinot koda apjomu, kas jums jāraksta.
- Uzlabota kļūdu novēršana: Novērš neparedzētas kļūdas, ko izraisa piekļuve null vai undefined vērtību īpašībām.
- Robustākas lietojumprogrammas: Padara jūsu lietojumprogrammu noturīgāku pret datu nekonsekvencēm un neparedzētām datu struktūrām.
Praktiski piemēri un lietošanas gadījumi
1. Piekļuve API datiem
Iegūstot datus no API, jums bieži vien nav pilnīgas kontroles pār datu struktūru. Daži lauki var trūkt vai tiem var būt null vērtības. Opcionālā ķēdēšana ir nenovērtējama, lai šādas situācijas apstrādātu graciozi.
async function fetchData(userId) {
const response = await fetch(`https://api.example.com/users/${userId}`);
const data = await response.json();
// Droši piekļūstiet lietotāja e-pastam, pat ja īpašība 'email' trūkst
const email = data?.profile?.email;
console.log("E-pasts:", email || "E-pasts nav pieejams"); // Izmantojiet nullish coalescing, lai nodrošinātu noklusējuma vērtību
// Droši piekļūstiet lietotāja adreses pilsētai
const city = data?.address?.city;
console.log("Pilsēta: ", city || "Pilsēta nav pieejama");
}
fetchData(123); // Piemēra lietojums
2. Darbs ar lietotāja preferencēm
Lietotāja preferences bieži tiek glabātas ligzdotos objektos. Opcionālā ķēdēšana var vienkāršot piekļuvi šīm preferencēm, pat ja dažas preferences nav definētas.
const userPreferences = {
theme: {
color: "dark",
},
};
// Droši piekļūstiet lietotāja fonta izmēram, nodrošinot noklusējuma vērtību, ja tā nav iestatīta
const fontSize = userPreferences?.font?.size || 16;
console.log("Fonta izmērs:", fontSize); // Izvade: 16 (noklusējuma vērtība)
const color = userPreferences?.theme?.color || "light";
console.log("Krāsu tēma:", color); // Izvade: dark
3. Notikumu klausītāju apstrāde
Strādājot ar notikumu klausītājiem, jums varētu būt nepieciešams piekļūt notikuma objekta īpašībām. Opcionālā ķēdēšana var palīdzēt novērst kļūdas, ja notikuma objekts vai tā īpašības nav definētas.
document.getElementById('myButton').addEventListener('click', function(event) {
// Droši piekļūstiet mērķa elementa ID
const targetId = event?.target?.id;
console.log("Mērķa ID:", targetId);
});
4. Internacionalizācija (i18n)
Daudzvalodu lietojumprogrammās jums bieži ir nepieciešams piekļūt tulkotajām virknēm no ligzdota objekta, pamatojoties uz lietotāja lokalizāciju. Opcionālā ķēdēšana vienkāršo šo procesu.
const translations = {
en: {
greeting: "Hello",
farewell: "Goodbye"
},
fr: {
greeting: "Bonjour",
//farewell: "Au Revoir" - noņemts demonstrācijas nolūkos
}
};
const locale = "fr";
// Droši piekļūstiet tulkotajam sveicienam
const greeting = translations?.[locale]?.greeting || "Hello";
console.log("Sveiciens:", greeting); // Izvade: Bonjour
// Droši piekļūstiet tulkotajai atvadu frāzei
const farewell = translations?.[locale]?.farewell || "Goodbye";
console.log("Atvadas:", farewell); //Izvade: Goodbye (noklusējums ir angļu valoda)
Opcionālā ķēdēšana ar funkciju izsaukumiem
Opcionālo ķēdēšanu var izmantot arī, lai droši izsauktu funkcijas, kas, iespējams, nepastāv. Šim nolūkam izmantojiet sintaksi ?.()
.
const myObject = {
myMethod: function() {
console.log("Metode izsaukta!");
}
};
// Droši izsauciet metodi, ja tā pastāv
myObject?.myMethod?.(); // Izvade: Metode izsaukta!
const myObject2 = {};
// Droši izsauciet metodi, bet tā nepastāv
myObject2?.myMethod?.(); // Nav kļūdas, nekas nenotiek
Opcionālā ķēdēšana ar piekļuvi masīviem
Opcionālo ķēdēšanu var izmantot arī ar piekļuvi masīviem, izmantojot sintaksi ?.[indekss]
. Tas ir noderīgi, strādājot ar masīviem, kas var būt tukši vai nav pilnībā aizpildīti.
const myArray = ["apple", "banana", "cherry"];
// Droši piekļūstiet masīva elementam
const firstElement = myArray?.[0]; // "apple"
const myArray2 = [];
// Droši piekļūstiet masīva elementam, tas būs undefined.
const firstElement2 = myArray2?.[0]; // undefined
const secondElement = myArray?.[10]; // undefined (nav kļūdas)
Opcionālās ķēdēšanas apvienošana ar Nullish Coalescing
Opcionālā ķēdēšana bieži darbojas roku rokā ar nulles vērtību apvienošanas operatoru (??
). Nulles vērtību apvienošanas operators nodrošina noklusējuma vērtību, ja operatora kreisā puse ir null vai undefined. Tas ļauj jums nodrošināt rezerves vērtības, ja kāda īpašība trūkst.
const user = {};
// Droši piekļūstiet lietotāja vārdam, nodrošinot noklusējuma vērtību, ja tā nav iestatīta
const name = user?.profile?.name ?? "Nezināms lietotājs";
console.log("Vārds:", name); // Izvade: Nezināms lietotājs
Šajā piemērā, ja user.profile
vai user.profile.name
ir null vai undefined, mainīgajam name
tiks piešķirta vērtība "Nezināms lietotājs".
Pārlūkprogrammu saderība
Opcionālā ķēdēšana ir salīdzinoši jauna JavaScript funkcija (ieviesta ECMAScript 2020). To atbalsta visas mūsdienu pārlūkprogrammas. Ja jums ir nepieciešams atbalstīt vecākas pārlūkprogrammas, jums, iespējams, būs jāizmanto transpaileris, piemēram, Babel, lai pārveidotu jūsu kodu uz saderīgu JavaScript versiju.
Ierobežojumi
- Opcionālo ķēdēšanu var izmantot tikai īpašību piekļuvei, nevis vērtību piešķiršanai. Jūs nevarat to izmantot piešķiršanas operatora kreisajā pusē.
- Pārmērīga lietošana var slēpt potenciālās kļūdas. Lai gan izpildlaika izņēmumu novēršana ir laba lieta, joprojām ir svarīgi saprast, kāpēc kāda īpašība varētu trūkt. Apsveriet iespēju pievienot žurnālfailu ierakstus vai citus atkļūdošanas mehānismus, lai palīdzētu identificēt un risināt pamatā esošās datu problēmas.
Labās prakses
- Izmantojiet to, ja neesat pārliecināts, vai īpašība pastāv: Opcionālā ķēdēšana ir visnoderīgākā, strādājot ar datu avotiem, kur īpašības var trūkt vai tām var būt null vērtības.
- Apvienojiet to ar nulles vērtību apvienošanu: Izmantojiet nulles vērtību apvienošanas operatoru (
??
), lai nodrošinātu noklusējuma vērtības, ja kāda īpašība trūkst. - Izvairieties no pārmērīgas lietošanas: Neizmantojiet opcionālo ķēdēšanu neapdomīgi. Izmantojiet to tikai tad, kad tas ir nepieciešams, lai izvairītos no potenciālu kļūdu slēpšanas.
- Dokumentējiet savu kodu: Skaidri dokumentējiet, kāpēc izmantojat opcionālo ķēdēšanu un kāda ir sagaidāmā rīcība, ja kāda īpašība trūkst.
Noslēgums
JavaScript opcionālās ķēdēšanas operators ir spēcīgs rīks, lai rakstītu tīrāku, drošāku un robustāku kodu. Nodrošinot kodolīgu veidu, kā piekļūt potenciāli trūkstošām īpašībām, tas palīdz novērst kļūdas, samazina šablona kodu un uzlabo koda lasāmību. Izprotot, kā tas darbojas, un ievērojot labās prakses, jūs varat izmantot opcionālo ķēdēšanu, lai veidotu noturīgākas un uzturamākas JavaScript lietojumprogrammas.
Iekļaujiet opcionālo ķēdēšanu savos projektos un izbaudiet drošas un elegantas piekļuves īpašībām priekšrocības. Tas padarīs jūsu kodu lasāmāku, mazāk pakļautu kļūdām un galu galā vieglāk uzturamu. Veiksmīgu programmēšanu!