ການບັນຫາ JavaScript - Throw ແລະ Try to Catch

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)

ບໍ່ຕ້ອງໃຊ້ບັນດາບັນດາລັກສະນະນີ້ໃນເວັບໄຊສາທາລະນະ. ບັນດາບັນດາລັກສະນະນີ້ບໍ່ຈະເຮັດວຽກໃນທຸກການຄົ້ນຫາ.