Lietuvių

Įsisavinkite JavaScript nulinės reikšmės sujungimo (??) operatorių efektyvesniam numatytųjų reikšmių priskyrimui. Sužinokite, kaip jis skiriasi nuo ARBA (||) ir peržiūrėkite praktinius pavyzdžius.

JavaScript Nulinės Reikšmės Sujungimas: Išsamus Vadovas Apie Numatytųjų Reikšmių Priskyrimą

JavaScript kalboje numatytųjų reikšmių priskyrimas yra įprasta užduotis. Tradiciškai programuotojai šiam tikslui naudojo ARBA operatorių (||). Tačiau nulinės reikšmės sujungimo operatorius (??), pristatytas ECMAScript 2020, suteikia tikslesnį ir patikimesnį būdą tvarkyti numatytųjų reikšmių priskyrimus, ypač dirbant su null arba undefined reikšmėmis. Šis vadovas išsamiai analizuoja nulinės reikšmės sujungimo operatorių, nagrinėja jo sintaksę, elgseną, skirtumus nuo ARBA operatoriaus ir praktinio pritaikymo atvejus.

Kas yra Nulinės Reikšmės Sujungimas?

Nulinės reikšmės sujungimo operatorius (??) yra loginis operatorius, kuris grąžina dešinės pusės operandą, kai kairės pusės operandas yra null arba undefined. Priešingu atveju jis grąžina kairės pusės operandą. Paprasčiau tariant, jis suteikia numatytąją reikšmę tik tada, kai kintamasis yra griežtai null arba undefined.

Sintaksė

Nulinės reikšmės sujungimo operatoriaus sintaksė yra paprasta:

kairysisOperandas ?? dešinysisOperandas

Čia kairysisOperandas yra kintamasis arba išraiška, kurią norite patikrinti, ar ji nėra null arba undefined, o dešinysisOperandas yra numatytoji reikšmė, kurią norite priskirti, jei kairysisOperandas iš tikrųjų yra null arba undefined.

Pavyzdys

Panagrinėkime šį pavyzdį:

const username = null ?? "Svečias";
console.log(username); // Išvestis: Svečias

const age = undefined ?? 25;
console.log(age); // Išvestis: 25

const city = "Londonas" ?? "Nežinoma";
console.log(city); // Išvestis: Londonas

Šiame pavyzdyje username priskiriama numatytoji reikšmė „Svečias“, nes iš pradžių ji yra null. Panašiai, age priskiriama 25, nes ji prasideda kaip undefined. Tačiau city išlaiko savo pradinę reikšmę „Londonas“, nes ji nėra nei null, nei undefined.

Nulinės ir Klaidingos (Falsy) Reikšmės

Svarbu suprasti skirtumą tarp nulinių ir klaidingų (falsy) reikšmių JavaScript kalboje. Nulinė reikšmė yra arba null, arba undefined. Klaidinga (falsy) reikšmė yra reikšmė, kuri laikoma klaidinga (false), kai naudojama loginės išraiškos kontekste. Klaidingos reikšmės apima:

Pagrindinis skirtumas yra tas, kad nulinės reikšmės sujungimo operatorius tikrina tik null arba undefined, o ARBA operatorius (||) tikrina bet kokią klaidingą (falsy) reikšmę.

Skirtumas Tarp ?? ir ||

ARBA operatorius (||) yra loginis ARBA operatorius, kuris grąžina dešinės pusės operandą, jei kairės pusės operandas yra klaidingas (falsy). Nors jį galima naudoti numatytosioms reikšmėms priskirti, jis gali sukelti netikėtą elgseną dirbant su tokiomis reikšmėmis kaip 0 ar tuščia eilutė.

Pavyzdys: || Spąstai

const quantity = 0 || 10; // Siekiame, kad numatytoji reikšmė būtų 10, jei kiekis nenurodytas
console.log(quantity); // Išvestis: 10 (Netikėta!), nes 0 yra klaidinga reikšmė

const text = '' || 'Numatytasis Tekstas'; //Siekiame, kad numatytasis tekstas būtų, jei tekstas nenurodytas
console.log(text); // Išvestis: Numatytasis Tekstas (Netikėta!), nes '' yra klaidinga reikšmė

Pirmajame pavyzdyje norėjome priskirti numatytąjį kiekį 10 tik tuo atveju, jei quantity nebuvo nurodytas (null arba undefined). Tačiau, kadangi 0 yra klaidinga reikšmė, ARBA operatorius neteisingai priskyrė numatytąją reikšmę. Panašiai, tuščia eilutė lemia, kad rodomas numatytasis tekstas, net jei eilutė egzistuoja (bet yra tuščia).

?? Naudojimas Tikslumui

Perrašykime ankstesnį pavyzdį naudodami nulinės reikšmės sujungimo operatorių:

const quantity = 0 ?? 10;
console.log(quantity); // Išvestis: 0 (Teisingai!)

const text = '' ?? 'Numatytasis Tekstas';
console.log(text); // Išvestis: '' (Teisingai!)

Dabar išvestis yra tokia, kokios tikėtasi. Nulinės reikšmės sujungimo operatorius tikrina tik null arba undefined, todėl 0 ir '' yra laikomos galiojančiomis reikšmėmis, o jų pradinės reikšmės išsaugomos.

Nulinės Reikšmės Sujungimo Panaudojimo Atvejai

Nulinės reikšmės sujungimo operatorius yra naudingas įvairiais atvejais, kai reikia pateikti numatytąsias reikšmes tik tada, kai kintamasis yra griežtai null arba undefined. Štai keletas dažniausių panaudojimo atvejų:

1. Pasirinktinių Funkcijos Parametrų Tvarkymas

Apibrėždami funkciją su pasirinktiniais parametrais, galite naudoti nulinės reikšmės sujungimo operatorių, kad pateiktumėte numatytąsias reikšmes, jei parametrai nebuvo nurodyti.

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

greet(); // Išvestis: Sveiki, Vartotojas!
greet("Alisa"); // Išvestis: Sveiki, Alisa!
greet("Bobas", "Sveikinimai"); // Išvestis: Sveikinimai, Bobas!

2. Numatytųjų Konfigūracijos Parinkčių Nustatymas

Dirbdami su konfigūracijos objektais, galite naudoti nulinės reikšmės sujungimo operatorių, kad užtikrintumėte, jog bus naudojamos numatytosios reikšmės, jei tam tikros konfigūracijos parinktys nenurodytos.

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

function fetchData(options) {
  const timeout = options.timeout ?? 10000; // Numatytasis laukimo laikas - 10 sekundžių
  const retries = options.retries ?? 5; // Numatytieji 5 bandymai
  console.log(`Laukimo laikas: ${timeout}, Bandymai: ${retries}`);
}

fetchData(config); // Išvestis: Laukimo laikas: 5000, Bandymai: 3
fetchData({}); // Išvestis: Laukimo laikas: 10000, Bandymai: 5
fetchData({timeout:null, retries: undefined}); // Išvestis: Laukimo laikas: 10000, Bandymai: 5

3. Prieiga Prie Įdėtųjų Objekto Ypatybių

Prieinant prie įdėtųjų objektų ypatybių, nulinės reikšmės sujungimo operatorius gali būti derinamas su pasirinktiniu grandininiu susiejimu (?.), kad būtų pateiktos numatytosios reikšmės, jei kuri nors iš tarpinių ypatybių yra null arba undefined.

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

const cityName = user?.profile?.address?.city ?? "Nežinoma";
console.log(cityName); // Išvestis: New York

const unknownUser = {};
const unknownCityName = unknownUser?.profile?.address?.city ?? "Nežinoma";
console.log(unknownCityName); // Išvestis: Nežinoma

4. Darbas su API ir Išoriniais Duomenimis

Gaunant duomenis iš API ar išorinių šaltinių, nulinės reikšmės sujungimo operatorius gali būti naudojamas numatytosioms reikšmėms pateikti, jei trūksta tam tikrų duomenų laukų arba jų reikšmės yra null arba undefined. Apsvarstykite galimybę gauti vartotojų duomenis iš skirtingų regionų. Tarkime, kai kuriuose regionuose vartotojo duomenyse gali nebūti lauko `country`.

async function getUserData(userId) {
  try {
    const response = await fetch(`https://api.example.com/users/${userId}`);
    const data = await response.json();
    const country = data.country ?? "Nežinoma Šalis";
    const timezone = data.timezone ?? "UTC";
    console.log(`Vartotojas iš: ${country}, Laiko juosta: ${timezone}`);
  } catch (error) {
    console.error("Klaida gaunant vartotojo duomenis:", error);
  }
}

// Simuliuojant skirtingus API atsakymus:
const userWithCountry = { name: "John", country: "USA", timezone: "EST" };
const userWithoutCountry = { name: "Jane", timezone: "GMT" };

// Norint tai išbandyti, jums reikėtų tikros API arba imituoti fetch funkciją.
// Demonstraciniais tikslais, imituokime atsakymus:
global.fetch = async (url) => {
    if (url.includes("123")) {
        return { json: async () => userWithCountry };
    } else if (url.includes("456")) {
        return { json: async () => userWithoutCountry };
    }
    throw new Error("Netikėtas URL");
};

getUserData(123); // Išvestis: Vartotojas iš: USA, Laiko juosta: EST
getUserData(456); // Išvestis: Vartotojas iš: Nežinoma Šalis, Laiko juosta: GMT

Operatorių Pirmumas

Nulinės reikšmės sujungimo operatorius turi santykinai žemą operatorių pirmumą. Jis yra žemesnis nei ARBA (||) ir IR (&&) operatoriai. Todėl, derinant nulinės reikšmės sujungimo operatorių su kitais loginiais operatoriais, būtina naudoti skliaustus, kad aiškiai apibrėžtumėte operacijų tvarką. To nepadarius, gali kilti sintaksės klaidų arba netikėta elgsena.

Pavyzdys: Skliaustų Naudojimas Aiškumui

// Be skliaustų (Sintaksės klaida)
// const result = false || null ?? "Numatytoji"; // SyntaxError: Unexpected token '??'

// Su skliaustais (Teisingai)
const result = false || (null ?? "Numatytoji");
console.log(result); // Išvestis: Numatemoji

const anotherResult = (false || null) ?? "Numatytoji";
console.log(anotherResult); // Išvestis: null

Pirmajame pavyzdyje skliaustų nebuvimas sukelia SyntaxError, nes JavaScript variklis negali nustatyti numatytos operacijų tvarkos. Pridėdami skliaustus, mes aiškiai nurodome varikliui pirmiausia įvertinti nulinės reikšmės sujungimo operatorių. Antrasis pavyzdys yra teisingas; tačiau išvestis skiriasi, nes pirmiausia įvertinama || išraiška.

Suderinamumas su Naršyklėmis

Nulinės reikšmės sujungimo operatorius (??) yra gana nauja funkcija, todėl svarbu atsižvelgti į suderinamumą su naršyklėmis, ypač jei orientuojatės į senesnes naršykles. Dauguma šiuolaikinių naršyklių palaiko nulinės reikšmės sujungimo operatorių, įskaitant:

Jei reikia palaikyti senesnes naršykles, galite naudoti transpiliatorių, pvz., Babel, kad konvertuotumėte savo kodą į suderinamą JavaScript versiją. Babel transformuos ?? operatorių į lygiavertį JavaScript kodą, kuris veikia senesnėse aplinkose.

Geriausios Praktikos

Štai keletas geriausių praktikų, kaip efektyviai naudoti nulinės reikšmės sujungimo operatorių:

Globalūs Aspektai

Kuriant programinę įrangą pasaulinei auditorijai, atsižvelkite į šiuos punktus, susijusius su numatytųjų reikšmių priskyrimu:

Pavyzdys: Lokalizacija su Nulinės Reikšmės Sujungimu

Tarkime, norite rodyti numatytąjį pasveikinimo pranešimą skirtingomis kalbomis, atsižvelgiant į vartotojo lokalę. Galite naudoti nulinės reikšmės sujungimo operatorių, kad pateiktumėte numatytąjį pranešimą, jei lokalizuotas pranešimas nepasiekiamas.

function getWelcomeMessage(locale) {
  const localizedMessages = {
    en: "Welcome!",
    fr: "Bienvenue !",
    lt: "Sveiki atvykę!"
  };

  const message = localizedMessages[locale] ?? "Welcome!"; // Jei lokalė nerasta, numatytoji reikšmė yra anglų kalba
  return message;
}

console.log(getWelcomeMessage("lt")); // Išvestis: Sveiki atvykę!
console.log(getWelcomeMessage("es")); // Išvestis: Welcome! (Numatytoji reikšmė - anglų kalba)

Išvada

Nulinės reikšmės sujungimo operatorius (??) yra vertingas JavaScript kalbos papildymas. Jis suteikia tikslesnį ir patikimesnį būdą priskirti numatytąsias reikšmes, palyginti su ARBA operatoriumi (||), ypač dirbant su tokiomis reikšmėmis kaip 0 ar tuščios eilutės. Suprasdami jo sintaksę, elgseną ir panaudojimo atvejus, galite rašyti švaresnį, lengviau prižiūrimą kodą, kuris tiksliai tvarko numatytųjų reikšmių priskyrimus. Naudodami nulinės reikšmės sujungimo operatorių savo projektuose, nepamirškite atsižvelgti į suderinamumą su naršyklėmis, operatorių pirmumą ir globalius aspektus.

Laikydamiesi šiame vadove pateiktų geriausių praktikų, galite efektyviai išnaudoti nulinės reikšmės sujungimo operatorių, kad pagerintumėte savo JavaScript kodo kokybę ir patikimumą, padarydami jį tvirtesnį ir lengviau suprantamą. Atminkite, kad visada turėtumėte teikti pirmenybę kodo aiškumui ir priežiūrai, o nulinės reikšmės sujungimo operatorius gali būti galingas įrankis siekiant šių tikslų.