日常开发中,程序都会遇到一些无法预计的错误,如:方法未定义,网络错误,文件不存在,无操作权限等异常情况
那么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 | 参数错误,当尝试使用未定义的变量、函数、对象时,会抛出该错误 |