⊗jsSpExcDAE 148 of 294 menu

Esempio di eccezione con attributi data- in JavaScript

Supponiamo che al caricamento della pagina, il server crei il codice HTML in cui sono memorizzati il nome, il prezzo e la quantità del prodotto acquistato:

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

Creiamo una funzione che accetti un riferimento all'elemento del prodotto e calcoli il costo totale del prodotto (prezzo moltiplicato per la quantità):

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

Calcoliamo il costo del nostro prodotto:

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

Supponiamo ora la seguente situazione: a causa di un qualche guasto del server, questo ci ha inviato un prodotto in cui manca il prezzo o la quantità (o entrambi), ad esempio, in questo modo:

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

Se ora si prova a calcolare il costo del prodotto, il risultato visualizzato sarà NaN. Sarete d'accordo, non è molto informativo.

Ciò significa che dobbiamo in qualche modo proteggerci dall'assenza degli attributi di cui abbiamo bisogno. Ci sono due modi per farlo. Il primo modo è considerarlo un comportamento normale e semplicemente verificare con degli if la presenza degli attributi necessari:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { return 0; // restituiamo qualcosa, ad esempio 0 o null o false } }

La seconda opzione è considerare l'assenza dell'attributo data-price o data-amount una situazione eccezionale. In questo caso dovremmo lanciare un'eccezione:

function getCost(elem) { if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) { return elem.dataset.price * elem.dataset.amount; } else { throw { name: 'ProductCostError', message: 'manca il prezzo o la quantità del prodotto' }; } }

Quale delle due opzioni sia più appropriata applicare qui è una scelta del programmatore. Egli può considerare il problema un normale funzionamento dello script o una situazione eccezionale.

Supponiamo che abbiamo deciso che la situazione è eccezionale. Allora il codice per ottenere il costo del prodotto sarà simile a questo:

let product = document.querySelector('#product'); try { let cost = getCost(product); alert(cost); } catch (error) { // reagiamo in qualche modo all'eccezione }

Modificate il mio codice in modo che la funzione getCost lanci due tipi di eccezioni: se manca il prezzo e se manca la quantità. Riflettete bene sui nomi di queste eccezioni. Nel blocco catch visualizzate messaggi di errore diversi per eccezioni di tipo diverso.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta