जावास्क्रिप्ट में data- एट्रिब्यूट्स के साथ अपवाद उदाहरण

मान लीजिए कि पेज लोड होने पर सर्वर HTML कोड बनाता है, जिसमें उत्पाद का नाम, कीमत और खरीदी गई मात्रा संग्रहीत होती है:

html<div id="product" data-product="सेब" data-price="1000" data-amount="5"></div>

आइए एक फ़ंक्शन बनाएं जो उत्पाद वाले एलिमेंट के लिंक को स्वीकार करेगा और माल की कुल लागत का पता लगाएगा (मूल्य को मात्रा से गुणा करें):

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

आइए हमारे उत्पाद की लागत का पता लगाएं:

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

alert(cost);

अब निम्नलिखित स्थिति मान लें: किसी सर्वर में खराबी के कारण, उसने हमें ऐसा उत्पाद भेजा जिसमें मूल्य या मात्रा गायब है (या दोनों एक साथ), उदाहरण के लिए, इस तरह:

html<div id="product" data-product="सेब" data-price="1000"></div>

यदि अब माल की लागत की गणना करने का प्रयास करें तो परिणाम स्क्रीन पर NaN दिखाई देगा। सहमत हैं, बहुत जानकारीपूर्ण नहीं है।

इसका मतलब है कि हमें किसी तरह खुद को इससे बचाने की जरूरत है कि हमारे आवश्यक एट्रिब्यूट्स गायब होंगे। यह दो तरीकों से किया जा सकता है। पहला तरीका यह कहना है कि यह सामान्य व्यवहार है और बस if के द्वारा हमारे आवश्यक एट्रिब्यूट्स की उपस्थिति की जांच करें:

javascriptfunction 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 एट्रिब्यूट की अनुपस्थिति - एक असाधारण स्थिति है। इस मामले में हम एक अपवाद फेंकेंगे:

javascriptfunction getCost(elem) {
  if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) {
    return elem.dataset.price * elem.dataset.amount;
  } else {
    throw {
      name: 'ProductCostError',
      message: 'उत्पाद की कीमत या मात्रा अनुपस्थित है'
    };
  }
}

यहां दोनों विकल्पों में से कौन सा अधिक उपयुक्त है - यह प्रोग्रामर का चुनाव है। वह समस्या को स्क्रिप्ट के सामान्य काम या एक असाधारण स्थिति के रूप में मान सकता है।

मान लीजिए कि हमने तय किया कि स्थिति असाधारण है। तब माल की लागत प्राप्त करने का कोड इस तरह दिखेगा:

javascriptlet product = document.querySelector('#product');

try {
  let cost = getCost(product);
  alert(cost);
} catch (error) {
  // अपवाद पर किसी तरह प्रतिक्रिया करें
}
Задание 1

मेरे कोड को इस तरह बदलें कि फ़ंक्शन getCost दो प्रकार के अपवाद फेंके: यदि कीमत गायब है और यदि मात्रा गायब है। इन अपवादों के नामों पर अच्छी तरह विचार करें। ब्लॉक catch में, विभिन्न प्रकार के अपवादों के लिए त्रुटि के विभिन्न संदेश प्रदर्शित करें।