⊗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 пайғомҳои гуногуни хатогиро барои истисноҳои намудҳои гуногун нишон диҳед.

Тоҷикӣ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мо барои коркарди сомона, таҳлил ва шахсӣ кардан аз cookie истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан