⊗jsSpExcDAE 148 of 294 menu

Data- ատրիբուտների բացառության օրինակ JavaScript-ում

Թող էջը բեռնվելիս սերվերը ստեղծի HTML կոդ, որում պահվում է գնված ապրանքի անվանումը, գինը և քանակը.

<div id="product" data-product="խնձոր" data-price="1000" data-amount="5"></div>

Եկեք ստեղծենք ֆունկցիա, որը կվերցնի ապրանքը պարունակող տարրի հղումը և կգտնի ապրանքի ընդհանուր արժեքը (գինը բազմապատկած քանակով).

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

Գտնենք մեր ապրանքի արժեքը.

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

Այժմ ենթադրենք հետևյալ իրավիճակը. սերվերում որոշ խափանման պատճառով այն մեզ ուղարկել է ապրանք, որում բացակայում է գինը կամ քանակը (կամ երկուսն էլ միանգամից), օրինակ, այսպես.

<div id="product" data-product="խնձոր" data-price="1000"></div>

Եթե հիմա փորձենք հաշվել ապրանքի արժեքը, ապա արդյունքում էկրանին կցուցադրվի NaN: Խոստովանեք, այնքան էլ տեղեկատվական չէ:

Ստացվում է, որ մենք պետք է ինչ-որ կերպ ապահովագրենք իրենք անհրաժեշտ ատրիբուտների բացակայությունից: Դա կարելի է անել երկու եղանակով: Առաջին եղանակը այն է, որ ասենք, թե սա նորմալ վարքագիծ է և ուղղակի ստուգենք if-ներով անհրաժեշտ ատրիբուտների առկայությունը.

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { return 0; // վերադարձնենք ինչ-որ բան, օրինակ՝ 0 կամ null կամ false } }

Երկրորդ տարբերակը այն է, որ ասենք, թե data-price կամ data-amount ատրիբուտի բացակայությունը - բացառիկ իրավիճակ է: Այս դեպքում մենք կնետենք բացառություն.

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { throw { name: 'ProductCostError', message: 'բացակայում է ապրանքի գինը կամ քանակը' }; } }

Թե երկու տարբերակներից որն է ավելի նպատակահարմար կիրառել այստեղ - դա ծրագրավորողի ընտրությունն է: Նա կարող է համարել խնդիրը սկրիպտի նորմալ աշխատանք կամ բացառիկ իրավիճակ:

Ենթադրենք, որ մենք որոշել ենք, որ իրավիճակը բացառիկ է: Այդ դեպքում ապրանքի արժեքը ստանալու կոդը կունենա հետևյալ տեսքը.

let product = document.querySelector('#product'); try { let cost = getCost(product); alert(cost); } catch (error) { // ինչ-որ կերպ արձագանքում ենք բացառությանը }

Փոխակերպեք իմ կոդն այնպես, որ getCost ֆունկցիան նետի երկու տեսակի բացառություններ. եթե բացակայում է գինը և եթե բացակայում է քանակը: Լավ մտածեք այդ բացառությունների անվանումների մասին: catch բլոկում ցուցադրեք տարբեր սխալի հաղորդագրություններ տարբեր տեսակի բացառությունների համար:

frsvtrbnro