try 语句让你测试代码块的错误.
catch 语句让你处理错误。
throw 语句让你创建自定义错误.
finally 语句允许执行代码, 在 try 和 catch 后, 不管结果如何.
错误会发生!
当执行JavaScript代码,可能产生不同的错误.
错误可能是程序员编码的错误,由于错误的输入,和其他不可预见的事情.
在这个例子中我们故意产生一个错误:
try {
adddlert("Welcome guest!");
}
catch(err) {
document.getElementById("demo").innerHTML = err.message;
}
JavaScript 捕获 adddlert 错误, 并且执行catch代码去处理它.
JavaScript try 和 catch
try 语句让你定义要在执行时测试错误的代码块.
catch 语句让你定义要执行的代码块,如果在try块中发生错误.
JavaScript try 和 catch 成对出现:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
JavaScript 抛出错误
当错误发生时,JavaScript通常会停止并生成错误信息.
这个术语是:JavaScript将抛出一个异常(抛出一个错误).
JavaScript会创建一个有两个属性的错误对象:名称和信息。
throw 语句
throw 语句允许创建自定义错误。
技术上你可以抛出异常(抛出错误).
异常可以是JavaScript字符串,数字,布尔值或对象:
throw "Too big"; // throw a text
throw 500; // throw a number
如果try和catch一起使用并抛出,则可以控制程序流并生成自定义错误消息.
输入验证的例子
此示例检查输入。如果值是错误的,则抛出异常(错误).
异常(错误)由catch语句捕获,并显示自定义错误消息:
Please input a number between 5 and 10:
Test Input
function myFunction() {
var message, x;
message = document.getElementById("message");
message.innerHTML = "";
x = document.getElementById("demo").value;
try {
if(x == "") throw "empty";
if(isNaN(x)) throw "not a number";
x = Number(x);
if(x < 5) throw "too low";
if(x > 10) throw "too high";
}
catch(err) {
message.innerHTML = "Input is " + err;
}
}
HTML验证
上面的代码就是一个例子.
现代的浏览器通常会结合使用JavaScript和内置的HTML验证,使用预定义的验证规则的HTML属性定义:
您可以在本教程的后面章节阅读更多关于表单验证的信息.
finally 语句
finally 句允许您在try和catch之后执行代码,不管结果如何:
try {
Block of code to try
}
catch(err) {
Block of code to handle errors
}
finally {
Block of code to be executed regardless of the try / catch result
}
function myFunction() {
var message, x;
message = document.getElementById("message");
message.innerHTML = "";
x = document.getElementById("demo").value;
try {
if(x == "") throw "is empty";
if(isNaN(x)) throw "is not a number";
x = Number(x);
if(x > 10) throw "is too high";
if(x < 5) throw "is too low";
}
catch(err) {
message.innerHTML = "Error: " + err + ".";
}
finally {
document.getElementById("demo").value = "";
}
}
Error 对象
JavaScript有一个内置的对象的错误,提供了错误的信息时发生错误.
error 对象提供两个有用的属性:名称和消息.
Error 对象属性
属性描述
name设置或返回错误名
message设置或返回错误信息(字符串)
Error 名称值
六个不同的值可以通过错误名称属性返回:
错误名称描述
EvalError在eval()函数时发生了一个错误
RangeError发生超出范围错误的数字
ReferenceError发生非法引用
SyntaxError发生语法错误
TypeError发生类型错误
URIError在encodeURI()中发生一个错误
下面描述了六个不同的值.
Eval 错误
EvalError 表示eval()函数发生错误.
新版本的JavaScript不抛出任何EvalError。而是使用SyntaxError代替
范围错误
RangeError 如果使用了超出非法值范围的数字,则发生错误.
例如:不能将数字的有效位数设置为 500.
var num = 1;
try {
num.toPrecision(500); // A number cannot have 500 significant digits
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
引用错误
ReferenceError 如果使用(引用)尚未声明的变量,则引发:
var x;
try {
x = y + 1; // y cannot be referenced (used)
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
语法错误
SyntaxError 如果代码有语法错误,则引发
try {
eval("alert('Hello)"); // Missing ' will produce an error
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
类型错误
TypeError 如果使用超出预期类型范围的值,则引发:
var num = 1;
try {
num.toUpperCase(); // You cannot convert a number to upper case
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
URI 错误
URIError 如果你在一个URI函数中使用非法字符:
try {
decodeURI("%%%"); // You cannot URI decode these percent signs
}
catch(err) {
document.getElementById("demo").innerHTML = err.name;
}
非标准错误对象属性
Mozilla和微软的一些非标准误差定义对象的属性:
fileName (Mozilla)
lineNumber (Mozilla)
columnNumber (Mozilla)
stack (Mozilla)
description (Microsoft)
number (Microsoft)
不要在公共网站中使用这些属性。他们不会在所有浏览器中工作。