JavaScript 错误 - Throw 和 Try to Catch

try Dace ce ta amince koda ce a tattauna dace a koda ce a fadi.

catch Dace ce ta amince koda ce a fadi.

throw yaju xuanze neng rang ni chuang jian zi ding cuowu。

finally Za a bada kama an fadi koda ce a fadi, kuma a fadi koda ce a fadi, bai nata ba.

Dace za a fadi kuma!

Dace za a fadi a kada ce a fadi koda ce a fadi JavaScript.

Dace za a fadi ba, wani dace ce ta dace ce mutum ce a fadi dace, dace ce ta dace ce wani dace ce mutum ce a fadi dace, ko wani dace ce wani dace ce mutum ce a fadi dace.

实例

A cikin wannan shi, a ta: adddlert Rita koda ce a fadi a kama an kai:

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

亲自试一试

JavaScript ya'a gudan adddlert a dace, kuma ya'a gudan koda ce a fadi dace.

JavaScript try da catch

try Dace ce ta amince koda ce a fadi, bai a fadi a kada ce a fadi.

catch Dace ce ta amince koda ce a fadi, bai try koda ce fadi ba.

JavaScript Statements trycatch Yan kuma:

try {
     Koda ce tattara
}
 catch(err) {
     Koda ce ta fadi dace
} 

JavaScript ya'a fadi dace

dang fa sheng cuowu shi, JavaScript tong guan hui ting zhi he chan sheng cuowu xiaoxi。

ji shu yu ci shi zhe yang shuo de:JavaScript jiang tao chu yichang (tao chu cuowu)

JavaScript zai shi jian hui chuang jian dai you liang ge shu xing de Error 对象:namemessage

throw yuju

throw yaju xuanze neng rang ni chuang jian zi ding cuowu。

ji ben shang ni neng gongtao chu yichang (tao chu cuowu)

yichang keyi shi JavaScript zi xuan, shu zi, bo li huo dui xiang:

throw "Too big";    //tao chu wen ben
throw 500;          //tao chu shu zi

ruger ba throw yu trycatch tong yi shi-yong, jiu neng kong zhi cheng xu liu he sheng cheng zi ding cuowu xiaoxi.

shuru yan zheng an li

ben li hui jian cha shuru. ruguo zhi shi cuowu de, jiang ta chu yichang (err).

chai zheng (err) bei catch yuju bao hu he xian shi yi tiao zi ding cuowu xiaoxi:

<!DOCTYPE html>
<html>
<body>
<p>qing shuru 5 - 10 zhi jian de shu zi:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">ceshi shuru</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 "kong de";
         if(isNaN(x)) throw "不是数字";
         x = Number(x);
        if(x < 5) throw  "tai xiao";
        if(x > 10) throw "tai da";
    }
    catch(err) {
        message.innerHTML = "shuru shi " + err;
    }
}
</script>
</body>
</html> 

亲自试一试

HTML yan zheng

shang ming daima jin jing shi yi ge lian zi.

xiandai xuanze xian chu han yi chang he neizhi de HTML yan zheng, tong guo shi-yong zai HTML shu xing zhong defined de yuding de yan zheng guize:

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

ni zai ben jiao cheng shao hou de zhangjie xue dao geng duo guan yu biao xing yan zheng de zhi shi.

finally yuju

finally yuju xuanze neng rang ni zai try he catch hou shi-xing daima, renhe jieguo:

try {
     // gong ceshi de daima ku
}
 catch(err) {
     // chuli cuowu de daima ku
} 
finally {
     // yanzheng jieguo renhe duoshao de daima ku
}

实例

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 对象

JavaScript 拥有当错误发生时提供错误信息的内置 error 对象。

error 对象提供两个有用的属性:namemessage

Error 对象属性

属性 描述
name 设置或返回错误名
message 设置或返回错误消息(一条字符串)

Error Name Values

error 的 name 属性可返回六个不同的值:

错误名 描述
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;
} 

亲自试一试

URI 错误

假如您在 URI 函数中使用非法字符,则 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)

请勿在公共网站使用这些属性。它们并不会在所有浏览器中工作。