ການບັນຫາ JavaScript - Throw ແລະ Try to Catch
- ຄັ້ງກ່ອນ JS ການຄວບຄຸມຄຳສັບສັງງານ
- ອີກຄັ້ງໄປຫລັງ JS ບາງບັນດາບັນດາກົດ
try
ຄຳສັ່ງອາດອະນຸຍາດໃຫ້ທ່ານທົດສອບຄວາມຜິດພາດໃນວຽກການ.
catch
ຄຳສັ່ງອາດອະນຸຍາດໃຫ້ທ່ານຈັດການຄວາມຜິດພາດ.
throw
ຄຳສັ່ງ throw ອາດຈະສ້າງຄຳບັນຫາບັນບາງ.
finally
ຈະອະນຸຍາດໃຫ້ທ່ານດຳເນີນວຽກການວຽກການພາຍຫຼັງ try ແລະ catch.
ຄວາມຜິດພາດຈະເກີດຂຶ້ນສະເພາະ!
ຄວາມຜິດພາດຈະເກີດຂຶ້ນເມື່ອດຳເນີນ JavaScript.
ຄວາມຜິດພາດສາມາດເປັນຄວາມຜິດພາດຂອງຜູ້ຂຽນລະບົບຊັບພະຍາຍາມ ຄວາມຜິດພາດຈາກການເຂົ້າຂໍ້ມູນຜິດພາດ ຫຼືຈາກບັນຫາທີ່ບໍ່ສາມາດໄດ້ຄາດເດົາໄດ້.
ຕົວຢ່າງ
ໃນກໍລະນີນີ້ພວກເຮົາໄດ້ adddlert
ຂຽນວຽກການຈັດການຄວາມຜິດພາດເພື່ອຈະສ້າງຄວາມຜິດພາດຢ່າງຈິງຈັງ:
<p id="demo"></p> <script> try { adddlert("ທາງຂອງທ່ານ!"); } catch(err) { document.getElementById("demo").innerHTML = err.message; } </script>
JavaScript ຈະກວດສອບ adddlert ເປັນຄວາມຜິດພາດ ແລະ ດຳເນີນວຽກການຈັດການຄວາມຜິດພາດນັ້ນ.
JavaScript try ແລະ catch
try
ຄຳສັ່ງອາດອະນຸຍາດໃຫ້ທ່ານອະນຸຍາດວຽກການທີ່ຈະກວດສອບຄວາມຜິດພາດໃນຖ້າວຽກການຈະດຳເນີນ.
catch
ຄຳສັ່ງອາດອະນຸຍາດໃຫ້ທ່ານອະນຸຍາດວຽກການຈັດການວຽກການທີ່ຈະດຳເນີນຖ້າມີຄວາມຜິດພາດໃນວຽກການ try.
ຄຳສັ່ງ JavaScript try
ແລະ catch
ຕົກລົງຕາມຕໍ່ກັນ:
try { ວຽກການທົດລອງ } catch(err) { ວຽກການຈັດການຄວາມຜິດພາດ }
JavaScript ສາຍຄວາມຜິດພາດ
ຖ້າເກີດບັນຫາ JavaScript ຈະຢຸດເວລາແລະສ້າງຂໍ້ບັນຫາ.
ຄຳນວຍຄວາມນີ້ຖືກອະທິບາຍແບບກ່າວ:JavaScript ຈະຍິງຄຳບັນຫາ(ຍິງບັນຫາ)。
JavaScript ຈະສ້າງຄຳບັນຫາກັບສອງລະບຽບ: Error Object:name
ແລະ message
。
throw 语句
throw
ຄຳສັ່ງ throw ອາດຈະສ້າງຄຳບັນຫາບັນບາງ.
ທີ່ດັ່ງກ່າວແລ້ວທ່ານສາມາດ:ຍິງຄຳບັນຫາ(ຍິງບັນຫາ)。
ຄຳບັນຫາສາມາດເປັນ JavaScript 字符串、数字、布尔ຫຼືວັດຖຸ:
throw "Too big"; //ຍິງຂໍ້ຄວາມ throw 500; //ຍິງຈຳນວນ
ຖ້າພຸ່ງ throw
ກັບ try
ແລະ catch
ພຽງແຕ່ຈະນຳໃຊ້ພຽງກັນກໍ່ສາມາດຄວບຄຸມການໄລຍະຂອງໂຄງການແລະສ້າງຂໍ້ບັນຫາບັນບາງ.
ກໍລະນີການວິເຄາະການເຂົ້າຂໍ້
ຄະນະນີ້ຈະກວດກາການເຂົ້າຂໍ້. ຖ້າມູນຄ່າບໍ່ຖືກຕ້ອງຈະຍິງຄຳບັນຫາ (err).
ຄຳບັນຫາ (err) ຖືກກັບຄຳສັ່ງ catch ແລະສະແດງຂໍ້ບັນຫາບັນບາງ:
<!DOCTYPE html> <html> <body> <p>ກະລຸນາເຂົ້າຂໍ້ 5 - 10:</p> <input id="demo" type="text"> <button type="button" onclick="myFunction()">ທົດລອງການເຂົ້າຂໍ້</button> <p id="message"></p> <script> function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "ວ່າຫຼັງ"; if(isNaN(x)) throw "ບໍ່ແມ່ນຈຳນວນ"; x = Number(x); if(x < 5) throw "ຫຼຸດ"; if(x > 10) throw "ຫຼາຍ"; } catch(err) { message.innerHTML = "ບາງຄຳບອກ " + err; } } </script> </body> </html>
HTML ການວິເຄາະ
ລະບຽບດັ່ງກ່າວນີ້ພຽງແຕ່ຫົວຂໍ້ຄວາມໜຶ່ງ.
ບັນດາບານບັນນາທິການທົ່ວໄປຈະປະສົມກັບ JavaScript ແລະ HTML ການວິເຄາະທີ່ມີຕົວເລກກ່ອນໃນລະບຽບ HTML:
<input id="demo" type="number" min="5" max="10" step="1">
ທ່ານຈະສຶກສາຫຼາຍກ່ຽວກັບການວິເຄາະຟອມບັນທຶກໃນຫົວຂໍ້ຕໍ່ໄປຂອງຄູກນີ້.
ຄຳສັ່ງ finally
finally
ຄຳສັ່ງອາດຈະດຳເນີນລະບຽບພາຍຫຼັງ try ແລະ catch ທັງໄດ້ຜົນ:
try { // ລະບຽບທີ່ຈະນຳໃຊ້ສຳລັບການທົດລອງ } catch(err) { // ລະບຽບທີ່ຈະຈັດການບັນຫາ } finally { // ບັນບາງລະບຽບທີ່ຈະດຳເນີນສະບາຍບໍ່ຄິດວ່າຜົນຈະໄດ້ແນວໃດ }
ຕົວຢ່າງ
function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "ຖືກນຳໃຊ້"; if(isNaN(x)) throw "ບໍ່ແມ່ນຈຳນວນ"; x = Number(x); if(x > 10) throw "ຫຼາຍຫຼາຍ"; if(x < 5) throw "ຫຼາຍກວ່າ"; } catch(err) { message.innerHTML = "ບັນຫາ: " + err + "."; } finally { document.getElementById("demo").value = ""; } }
Error Object
JavaScript ມີບັນດາຄວາມທີ່ມີຄວາມປະສົງໃນຂະນະທີ່ບັນຫາຈະເກີດຂຶ້ນ
ບັນດາຄວາມຂອງບັນດາຄວາມ error ສາມາດຜະລິດສອງບ່ອນປະສາດທີ່ມີປະໂຫຍດຫຼາຍname
ແລະ message
。
Error Object Properties
ບ່ອນປະສາດ | ການອະທິບາຍ |
---|---|
name | ການຕັ້ງກັນຫລືກັບຄືນຊື່ບັນຫາ |
message | ການຕັ້ງກັນຫລືກັບຄືນຂໍ້ຄວາມບັນຫາ (ຄຳແນນນຳໃຊ້ທີ່ແມ່ນຄຳແນນສະແດງຄຳສັນຍາທີ່ເປັນຄຳແນນສະແດງຄຳສັນຍາ) |
Error Name Values
ບັນດາຄວາມຂອງປະສານ error ສາມາດກັບຄືນຄວາມທີ່ຫລາຍຄວາມຫຼາຍຄວາມຕ່າງກັນຫົກຄວາມ
ຊື່ບັນຫາ | ການອະທິບາຍ |
---|---|
EvalError | ບັນຫາທີ່ເກີດຂຶ້ນໃນຕົວເລກ eval() |
RangeError | ບັນຫາຕົວເລກທີ່ເກີດຂຶ້ນທາງຂອບເຂດຈຳນວນຫົວເລກ |
ReferenceError | ບັນຫາການນຳໃຊ້ທີ່ຜິດພາດ |
SyntaxError | ບັນຫາຕົວເລກທີ່ເກີດຂຶ້ນ |
TypeError | ບັນຫາຕົວເລກທີ່ເກີດຂຶ້ນ |
URIError | ບັນຫາທີ່ເກີດຂຶ້ນໃນ encodeURI() |
ພິມຄຳອະທິບາຍຂອງຫົກຄວາມຂັດແຍ່ງທີ່ຫລາຍຄວາມຫຼາຍຄວາມຕ່າງກັນ
ບັນຫາ Eval
EvalError
ຕົວແທນການຖືກກາຍດອກຂອງຕົວເລກ eval()
ຄິດວ່າ JavaScript ບັນດາຫລັກພາບບໍ່ຈະຖືກກາຍດອກຫລັງການປັບປຸງ EvalError
。ກະລຸນານຳໃຊ້ SyntaxError
ປ່ຽນແທນ.
ບັນຫາຂອບເຂດ
RangeError
ຈະຖືກຂາຍດອກໃນຂະນະທີ່ເຈົ້ານຳໃຊ້ຈຳນວນຫົວເລກທີ່ຢູ່ພາຍໃນຂອບເຂດຄວາມຄາດຫວັງທີ່ຖືກກຳນົດ
ຕົວຢ່າງ: ເຈົ້າບໍ່ສາມາດຕັ້ງຈຳນວນສິບຕາມຂອງຈຳນວນຫົວເລກໃຫ້ເປັນ 500.
ຕົວຢ່າງ
var num = 1; try { num.toPrecision(500); // ຈຳນວນສິບຕາມບໍ່ສາມາດມີ 500 ວັດທະນາຄານມາດ } catch(err) { document.getElementById("demo").innerHTML = err.name; }
ບັນຫາການນຳໃຊ້
ຖ້າເຈົ້ານຳໃຊ້ (ຖືກນຳໃຊ້) ຄູ່ມູນທີ່ບໍ່ໄດ້ຖືກຖະແຫຼງ ReferenceError
ຈະຖືກຂາຍດອກ:
ຕົວຢ່າງ
var x; try { x = y + 1; // y ບໍ່ສາມາດຖືກນຳໃຊ້ (ໃຊ້) } catch(err) { document.getElementById("demo").innerHTML = err.name; }
ບັນຫາຕົວເລກ
ຖ້າເຈົ້າທຳນາຍຄຳສັນຍາທີ່ມີຄວາມຜິດພາດຕາມມະນາຄົມ SyntaxError
ຖືກປ່ອຍອອກ:
ຕົວຢ່າງ
try { eval("alert('Hello')"); // ການຂາດ ' ຈະເປັນການຜິດພາດ } catch(err) { document.getElementById("demo").innerHTML = err.name; }
ບັນຫາຕົວເລກ
ຖ້າຄູ່ມູນທີ່ເຈົ້ານຳໃຊ້ບໍ່ຢູ່ໃນຂອບເຂດຄວາມຄາດຫວັງ TypeError
ຖືກປ່ອຍອອກ:
ຕົວຢ່າງ
var num = 1; try { num.toUpperCase(); // ບໍ່ສາມາດການປ່ຽນວັດຖຸເປັນພາສາສັງກະນາການທີ່ສາມາດຖ່າຍຕົວມາ } catch(err) { document.getElementById("demo").innerHTML = err.name; }
URIError
ຖ້າເຈົ້າໃຊ້ວັດຖຸທີ່ບໍ່ຈະເປັນມາຈາກການຈັດຕັ້ງ URI, ການປ່ອຍອອກ URIError ຈະເກີດຂຶ້ນ: URIError
ຖືກປ່ອຍອອກ:
ຕົວຢ່າງ
try { decodeURI("%%%"); // ບໍ່ສາມາດການການຄົ້ນຫາ URI ຂອງພັນພາສາໄດ້ } catch(err) { document.getElementById("demo").innerHTML = err.name; }
ບັນດາລັກສະນະ error ທີ່ບໍ່ແມ່ນມາຈາກມະນຸດ
Mozilla ແລະ Microsoft ກໍານົດບັນດາລັກສະນະ error ທີ່ບໍ່ແມ່ນມາຈາກມະນຸດ.
- fileName (Mozilla)
- lineNumber (Mozilla)
- columnNumber (Mozilla)
- stack (Mozilla)
- description (Microsoft)
- number (Microsoft)
ບໍ່ຕ້ອງໃຊ້ບັນດາບັນດາລັກສະນະນີ້ໃນເວັບໄຊສາທາລະນະ. ບັນດາບັນດາລັກສະນະນີ້ບໍ່ຈະເຮັດວຽກໃນທຸກການຄົ້ນຫາ.
- ຄັ້ງກ່ອນ JS ການຄວບຄຸມຄຳສັບສັງງານ
- ອີກຄັ້ງໄປຫລັງ JS ບາງບັນດາບັນດາກົດ