⊗jsSpExcDAE 148 of 294 menu

Mfano wa Kutenga kwa data- attributes katika JavaScript

Acha wakati ukurasa unapopakuliwa, seva itatengeneza msimbo wa HTML ambao huhifadhi jina, bei na kiasi cha bidhaa iliyonunuliwa:

<div id="product" data-product="apple" data-price="1000" data-amount="5"></div>

Wacha tufanye utendaji, ambao utakubali kiunga cha kipengee chenye bidhaa na kupata gharama kamili ya bidhaa (bei zidishwe kwa kiasi):

function getCost(elem) { return elem.dataset.price * elem.dataset.amount; }

Wacha tupate gharama ya bidhaa yetu:

let product = document.querySelector('#product'); let cost = getCost(product); alert(cost);

Hebu tuchukulie hali ifuatayo: kwa sababu ya baadhi ya hitilafu kwenye seva, ilitutumia bidhaa ambayo inakosa bei au kiasi (au zote mbili mara moja), kwa mfano, kama hivi:

<div id="product" data-product="apple" data-price="1000"></div>

Ikiwa sasa utajaribu kuhesabu gharama ya bidhaa, matokeo kwenye skrini yataonyesha NaN. Unakubaliana, hayawezi kueleweka vyema.

Inamaanisha, tunahitaji kujilinda kwa namna fulani kutokana na ukosefu wa sifa tulizohitaji. Hii inaweza kufanyika kwa njia mbili. Njia ya kwanza - ni kusema kwamba hii ni tabia ya kawaida na tu kuangalia kwa kutumia 'if' uwepo wa sifa tunazohitaji:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { return 0; // turudishe kitu, kwa mfano, 0 au null au false } }

Chaguo la pili - ni kusema kwamba kutokuwepo kwa sifa data-price au data-amount - ni hali ya ubaguzi. Katika kesi hii tutatupa ubaguzi:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { throw { name: 'ProductCostError', message: 'bei au kiasi kimekosekana kwenye bidhaa' }; } }

Ni ipi kati ya chaguzi hizi mbili inafaa zaidi kutumia hapa - hii ni uchaguzi wa programu. Anaweza kuchukulia tatizo kama kazi ya kawaida ya hati au kama hali ya ubaguzi.

Wacha tuache tumeamua, kwamba hali ni ya ubaguzi. Basi msimbo wa kupata gharama ya bidhaa utaonekana hivi:

let product = document.querySelector('#product'); try { let cost = getCost(product); alert(cost); } catch (error) { // tutathmini kwa namna fulani ubaguzi }

Badilisha msimbo wangu ili utendaji getCost utape aina mbili za vibaguzi: ikiwa bei haipo na ikiwa kiasi kimekosekana. Fikiria kwa umakini kuhusu majina ya vibaguzi hivi. Katika kizuizi catch onyesha ujumbe tofauti wa hitilafu kwa vibaguzi vya aina tofauti.

esfrswkkro