日常开发中,程序都会遇到一些无法预计的错误,如:方法未定义,网络错误,文件不存在,无操作权限等异常情况
那么JavaScript也一样,会产生一些运行中的错误,下文笔者将讲述JS中错误异常简介及处理方法,如下所示
JavaScript中错误异常的分类
语法错误:
也称为解析错误
一般是因为代码存在某些语法错误引起的
当发生语法错误时,代码会停止运行
运行时错误:
也称为异常
发生在程序运行期间
如:
调用未定义的方法
读取不存在的文件等
发生运行时错误也会终止代码运行;
逻辑错误:
逻辑错误常指逻辑错误导致程序运行异常或终止运行
JS中错误和异常区别
错误(Error):
常指代码运行之前出现
在运行JavaScript程序之前
JavaScript解释器会先对代码进行检查
如果代码有误,如某些语法错误,浏览器就会报出相应的错误,只有将错误修正后,代码才能运行。
异常(Exception):
指代码运行中出现
如:
调用某个未定义的方法、读取不存在的文件等
在出现异常之前
代码的运行并不受影响
当出现异常时
会在浏览器控制台输出错误信息,此时程序也终止运行
JavaScript异常处理
异常处理的功能:
用于捕捉产生异常的代码
使整个程序不会因为异常而终止运行
在JavaScript中,可以使用try catch 语句来捕获异常
并做出相应处理
try catch语法格式如下所示:
try {
// 可能会发生异常的代码
} catch(error) {
// 发生异常时要执行的操作
}
JavaScript异常处理示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>linux28.com -- JavaScript</title>
</head>
<body>
<script>
try {
var title = "JavaScript";
document.write(title);
// 调用一个未定义的变量
document.write(str);
// 若发生错误,则不会执行以下行
alert("所有语句都已成功执行。");
} catch(error) {
// 处理错误
alert("错误信息: " + error.message);
}
// 继续执行下面的代码
document.write("<p>Hello World!</p>");
</script>
</body>
</html>
//代码说明
当try语句块中的代码出现异常时
会创建并抛出一个 Error 对象(如catch(error)中error)
对象中包含两个属性
name:错误的类型
message:对错误的描述信息
JS try catch finally语句
在 try catch 语句的后面
添加一个 finally 语句块
无论 try 语句块中的代码是否发生错误
finally 语句中的代码都会执行
例:try catch finally
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>linux28.com -- JavaScript</title>
</head>
<body>
<script>
// 接收用户输入的参数
var num = prompt("输入一个 0 到 100 的数字");
// 获取当前时间
var start = Date.now();
try {
if(num > 0 && num <= 100) {
console.log(Math.pow(num, num)); // 指数幂的基
} else {
console.log("输入的值无效!");
}
} catch(e) {
console.log(e.message);
} finally {
// 显示执行代码所用的时间
console.log("代码执行花费了:" + (Date.now() - start) + "ms");
}
</script>
</body>
</html>
JS 抛出错误的方法
在JavaScript中,我们可以使用JS内置的异常信息,也可以抛出我们自定义的错误信息 如: throw experession expression使用Error()内置函数抛出错误对象例:抛出错误信息的示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
<script>
function squareRoot(number) {
// 如果数字为负数,则抛出错误
if(number < 0) {
throw new Error("抱歉,无法计算负数的平方根!");
} else {
console.log(Math.sqrt(number));
}
}
try {
squareRoot(16);
squareRoot(625);
squareRoot(-9);
squareRoot(100);
// 若抛出错误,则不会执行下面的行
console.log("所有函数都执行成功。");
} catch(e) {
// 处理错误
console.log(e.message);
}
</script>
</body>
</html>
JS内置错误类型
| 错误类型 | 备注 |
| EvalError | 使用 eval() 函数时发出错误,会抛出该错误 |
| InternalError | 由 JavaScript 引擎内部错误导致的异常,会抛出该错误 |
| RangeError | 范围错误,当使用了超出允许范围的数值时,会抛出该错误 |
| SyntaxError | 语法错误,当代码中存在任何语法错误时,会抛出该错误 |
| TypeError | 类型错误,当使用的值不是预期类型时,会抛出该错误,例如对数字调用字符串方法,对字符串调用数组方法等 |
| URIError | URI 错误,当使用 URI 相关函数但传入 URI 参数时,会抛出该错误 |
| ReferenceError | 参数错误,当尝试使用未定义的变量、函数、对象时,会抛出该错误 |