Mga Error ng JavaScript - Throw at Try to Catch

try Ang pangungusap ay nagbibigay ng kapahintulutan sa iyo na testin ang mga error sa blok ng kodigo.

catch Ang pangungusap ay nagbibigay ng kapahintulutan sa iyo na magtanggap ng error.

throw 语句允许您创建自定义错误。

finally Nagbibigay ng kapahintulutan sa iyo na magsagawa ng kodigo, sa ibabaw ng try at catch, kahit anong resulta.

Ang error ay laging mangyayari!

Maaaring mangyari ang iba't ibang mga error kapag inaagaw ang kodigo ng JavaScript.

Ang error ay maaaring maging isang pagkakamali ng koder, isang error na dulot ng maling input, o maaaring maging isang hindi inaasahang problema.

Example

Sa kasong ito, gamit namin ang adddlert Sumulat ng kodigo ng babala upang sinadyang gumawa ng isang error:

<p id="demo"></p>
<script>
try {
    adddlert("Maligayang pumunta!");
{}
catch(err) {
    document.getElementById("demo").innerHTML = err.message;
{}
</script>

Try It Yourself

Nakatanggap ng JavaScript ang adddlert bilang isang error, at pagkatapos ay ipinapatnubayan ang kodigo para sa pagtanggap ng error.

JavaScript try at catch

try Ang pangungusap ay nagbibigay ng kapahintulutan upang itakda ang isang blok ng kodigo upang makita ang mga error habang inaagaw.

catch Ang pangungusap ay nagbibigay ng kapahintulutan upang itakda ang isang blok ng kodigo na dapat ipatnugot, kung mayroong error sa blok ng kodigo ng try.

Statement ng JavaScript try At catch Nagpapatong:

try {
     Blok ng kodigo para sa pagsubok
{}
 catch(err) {
     Blok ng kodigo para sa pagtanggap ng error
{} 

JavaScript naglalabas ng error

当发生错误时,JavaScript 通常会停止并产生错误消息。

技术术语是这样描述的:JavaScript 将抛出异常(抛出错误).

JavaScript 实际上会创建带有两个属性的 Object na errorname At message.

throw 语句

throw 语句允许您创建自定义错误。

从技术上讲您能够抛出异常(抛出错误).

异常可以是 JavaScript 字符串、数字、布尔或对象:

throw "Too big";    // 抛出文本
throw 500;          // 抛出数字

如果把 throwtry At 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 "Hindi isang numero";
         x = Number(x);
        if(x < 5) throw  "太小";
        if(x > 10) throw "太大";
    {}
    catch(err) {
        message.innerHTML = "输入是 " + err;
    {}
{}
</script>
</body>
</html> 

Try It Yourself

HTML 验证

以上代码仅仅是一个例子。

现代浏览器通常会结合 JavaScript 与内置的 HTML 验证,通过使用在 HTML 属性中定义的预定义的验证规则:

<input id="demo" type="number" min="5" max="10" step="1">

您将在本教程稍后的章节学到更多有关表单验证的知识。

finally 语句

finally 语句允许您在 try 和 catch 之后执行代码,无论结果:

try {
     // 供测试的代码块
{}
 catch(err) {
     // 处理错误的代码块
{} 
finally {
     // 情况不论结果如何都执行的代码块
{}

Example

function myFunction() {
    var message, x;
    message = document.getElementById("message");
    message.innerHTML = "";
    x = document.getElementById("demo").value;
    try { 
        if(x == "") throw "Huhulog";
        if(isNaN(x)) throw "Hindi isang numero";
         x = Number(x);
        if(x >  10) throw "Magkakalaki";
        if(x <  5) throw "Magkaunti";
    {}
    catch(err) {
        message.innerHTML = "Error: " + err + ".";
    {}
    finally {
        document.getElementById("demo").value = "";
    {}
{}

Try It Yourself

Object na error

Ang JavaScript ay may nakalipas na object na error na nagbibigay ng mensahe ng error kapag may error.

Ang object na error ng JavaScript ay nagbibigay ng dalawang kapaki-pakinabang na property:name At message.

Mga property ng Error object

Property Paglalarawan
name Itakda o ibalik ang pangalan ng error
message Itakda o ibalik ang mensahe ng error (isang string na mensahe)

Error Name Values

Ang property na name ng error ay makakapagbibigay ng anim na magkakaibang halaga:

Mga halaga ng pangalan ng error Paglalarawan
EvalError Nangyari ang error sa loob ng function na eval().
RangeError Nangyari ang error na walang saklaw ng numero.
ReferenceError Nangyari ang ilegal na paggamit ng alamat.
SyntaxError Nangyari ang maling sintaksis.
TypeError Nangyari ang maling uri.
URIError Ang error na nangyari sa loob ng encodeURI().

Nakikita ninyo sa ibaba ang detalye ng anim na magkakaibang halaga.

Eval Error

EvalError Indikasyon ng error sa loob ng function na eval().

Ang bagong bersyon ng JavaScript ay hindi magpapalabas ng anumang EvalErrorMangyaring gamitin: SyntaxError Pagsuwayin.

Maling saklaw

RangeError ay maipapalabas kapag gamit mo ang numero na wala sa lehitimong saklaw ng halaga.

Halimbawa: Hindi mo maaaring itakda ang bilang ng nagiging tamang numero ng isang numero na 500.

Example

var num = 1;
try {
    num.toPrecision(500);   // Ang numero ay hindi maaring magkaroon ng 500 na nagiging tamang numero
 {}
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
{} 

Try It Yourself

Maling paggamit ng alamat

Kung ikaw ay gumagamit (pinagmumulan) ng hindi pa nagdeklara na variable, ReferenceError ay maipapalabas:

Example

var x;
try {
    x = y + 1;   // Hindi maaring mabigyan ng alamat ang y (sa paggamit)
 {}
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
{} 

Try It Yourself

Maling sintaksis

Kung ikaw ay nagtatalaga ng kodigo na may sintaksis na error, SyntaxError Thrown:

Example

try {
    eval("alert('Hello')");   // Ang pagkawala ng ' ay magbibigay ng error
{}
catch(err) {
     document.getElementById("demo").innerHTML = err.name;
{} 

Try It Yourself

Maling uri

Kung ang halaga na ginamit ninyo ay hindi nasa saklaw ng inaasahang halaga, TypeError Thrown:

Example

var num = 1;
try {
    num.toUpperCase();   // You cannot convert numbers to uppercase
 {}
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
{} 

Try It Yourself

URI Error

If you use illegal characters in URI functions, then URIError Thrown:

Example

try {
    decodeURI("%%%");   // You cannot encode these percent signs in URI
 {}
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
{} 

Try It Yourself

Non-standard Error Object Properties

Mozilla and Microsoft have defined non-standard error object properties:

  • fileName (Mozilla)
  • lineNumber (Mozilla)
  • columnNumber (Mozilla)
  • stack (Mozilla)
  • description (Microsoft)
  • number (Microsoft)

Do not use these properties on public websites. They do not work on all browsers.