การโยนข้อยกเว้นใน JavaScript

พิจารณาบล็อก catch ของงานที่มี JSON ของผลิตภัณฑ์:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('JSON ของผลิตภัณฑ์ไม่ถูกต้อง');
  } else if (error.name == 'ProductCostError') {
    alert('ผลิตภัณฑ์ขาดราคาหรือปริมาณ');
  }
}

อย่างที่คุณเห็น เราจับข้อยกเว้นสองอย่างที่เราวางแผนไว้และตอบสนองต่อมัน แต่จะเกิดอะไรขึ้นหากมีข้อยกเว้นประเภทอื่นที่เราไม่ได้คาดคิด? ในกรณีนี้ มันจะเข้ามาในบล็อก catch เช่นกัน แต่ จะไม่มีการตอบสนองใด ๆ ตามมา เนื่องจาก ข้อยกเว้นที่มีประเภทอื่นจะไม่เข้าเงื่อนไขในคำสั่ง if ของเรา

เมื่อฉันบอกว่าจะไม่มีการตอบสนองใด ๆ ฉันหมายความว่าจริง ๆ แล้วจะไม่มีอะไรเลย: แม้แต่ข้อผิดพลาดในคอนโซลก็จะไม่ปรากฏ โค้ดของเราก็จะไม่ทำงานโดยไม่ส่งเสียงใด ๆ

ดังนั้นจึงมีกฎดังนี้: โค้ดของคุณ ควรจับเฉพาะข้อยกเว้นที่ รู้วิธีจัดการเท่านั้น หากข้อยกเว้น ไม่เป็นที่รู้จัก ต้อง โยน มันต่อไปโดยใช้ throw ในกรณีนี้ ข้างบนจะมีผู้ที่เข้าใจมากกว่าจับมันไว้ หรือข้อยกเว้นจะปรากฏเป็นข้อผิดพลาดในคอนโซล

มาแก้ไขโค้ดของเรากัน:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('JSON ของผลิตภัณฑ์ไม่ถูกต้อง');
  } else if (error.name == 'ProductCostError') {
    alert('ผลิตภัณฑ์ขาดราคาหรือปริมาณ');
  } else {
    throw error; // โยนข้อยกเว้นต่อไป
  }
}
Задание 1

มีโค้ดต่อไปนี้:

javascripttry {
  let arr = JSON.parse(json);

  for (let i = 0; i < arr.length; i++) {
    localStorage.setItem(i, arr[i]);
  }
} catch (error) {
  if (error.name == 'QuotaExceededError') {
    alert('พื้นที่ในที่เก็บข้อมูลหมด');
  }
  
  if (error.name == 'SyntaxError') {
    alert('JSON ไม่ถูกต้อง');
  }
}

มีอะไรผิดปกติกับโค้ดนี้? แก้ไขมันให้ ดีขึ้น