Mga Error ng JavaScript - Throw at Try to Catch
- Previous Page JS Operator Precedence
- Next Page JS Scope
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>
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 error:name
At message
.
throw 语句
throw
语句允许您创建自定义错误。
从技术上讲您能够抛出异常(抛出错误).
异常可以是 JavaScript 字符串、数字、布尔或对象:
throw "Too big"; // 抛出文本 throw 500; // 抛出数字
如果把 throw
与 try
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>
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 = ""; {} {}
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 EvalError
Mangyaring 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; {}
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; {}
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; {}
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; {}
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; {}
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.
- Previous Page JS Operator Precedence
- Next Page JS Scope