⊗jsSpExcDAE 148 of 294 menu

Esimerkki poikkeuksista data-attribuuteissa JavaScriptissä

Kun sivu latautuu, palvelin luo HTML-koodin, joka sisältää tuotteen nimen, hinnan ja ostetun määrän:

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

Tehdään funktio, joka ottaa vastaan viittauksen tuoteelementtiin ja laskee tuotteen kokonaishinnan (hinta kerrottuna määrällä):

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

Lasketaan tuotteemme hinta:

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

Oletetaan nyt seuraava tilanne: palvelimella tapahtuu häiriö ja se lähettää meille tuotteen, josta puuttuu hinta tai määrä (tai molemmat), esimerkiksi näin:

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

Jos nyt yritetään laskea tuotteen hinta, tulokseksi näytetään NaN. Oletetaan, ettei se ole kovin informatiivista.

Näin ollen meidän on suojauduttava siltä, että tarvitsemiamme attribuutteja ei ole. Tämä voidaan tehdä kahdella tavalla. Ensimmäinen tapa on sanoa, että tämä on normaalia käyttäytymistä ja yksinkertaisesti tarkistaa if-lauseilla tarvittavien attribuuttien olemassaolo:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { return 0; // palautetaan jotain, esimerkiksi 0 tai null tai false } }

Toinen vaihtoehto on sanoa, että attribuutin data-price tai data-amount puuttuminen - on poikkeuksellinen tilanne. Tässä tapauksessa heitämme poikkeuksen:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { throw { name: 'ProductCostError', message: 'tuotteelta puuttuu hinta tai määrä' }; } }

Kumpi näistä kahdesta vaihtoehdosta on tässä sopivampi - on ohjelmoijan valinta. Hän voi pitää ongelmaa skriptin normaalina toimintana tai poikkeuksellisena tilanteena.

Oletetaan, että päätimme, että tilanne on poikkeuksellinen. Silloin tuotteen hinnan saamisen koodi näyttää tältä:

let product = document.querySelector('#product'); try { let cost = getCost(product); alert(cost); } catch (error) { // reagoidaan jotenkin poikkeukseen }

Muokkaa koodiani siten, että funktio getCost heittää kahden tyyppisiä poikkeuksia: jos hinta puuttuu ja jos määrä puuttuu. Mieti hyvin näiden poikkeusten nimiä. Lohkossa catch näytä erilaisia virheilmoituksia eri tyyppisistä poikkeuksista.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää