错误与异常是什么
错误,指程序中的非正常运行状态,在其它编程语言中称为“异常”或“错误”。解释器会为每个错误情形创建并抛出一个Error对象, 其中包含错误的描述信息。
通过使用、JavaScript提供的异常处理语句,可以用结构化的方式来捕捉发生的错误,让异常处理代码与核心业务代码实现分离。
错误与异常处理在应用中的重要性是毋庸置疑的。任何有影响力的Web应用都需要一套完善的错误处理机制。
try…catch语句
try…catch语句
try…catch语句作为JavaScript中处理异常的一种标准方式。try语句标记一块待尝试的语句,如果该语句出现错误,则通过catch语句进行捕获。
try{
//可能会导致错误的代码
}catch(error){
//在错误发生时的处理
}
捕捉块
可以使用捕捉块来处理所有可能在try代码中产生的异常。
catch(catchID){
statements
}
- 捕捉块指定了一个标识符(上述语句中的catchID)来存
- 放抛出语句指定的值。
- 可以用这个标识符来获取抛出的异常信息。
实例:
try{ // 用于捕获指定语句块中的 错误或异常
console.log(v); //调用未定义变量 -> 报错
}
catch (e){ // 用于处理try语句中出现的错误
console.log(e); //e - 表示try语句中出现错误的信息
}
// try语句就是把语法报错的内容改成了提示
// 原因是为了不让用户看到软件的缺漏
终结块
终结块包含了在try和catch完成后、下面接着的语句之前执行的语句。终结块无论是否抛出异常都会执行。如果抛出了一个异常,就算没有异常处理,终结块李的语句也会执行。
try{
console.log(0);
}catch(error){
console.log(1);
}finally{
console.log(3);
}
嵌套try…catch语句
可以嵌套一个或多个try…catch语句。如果一个内部的try…catch语句没有捕捉块,将会启动匹配外部的try…catch语句的捕捉块。
try{
console.log(0);
}catch(error){
try{
console.log(1);
}catch(error){
console.log(2);
}
}
总结:
try 语句允许我们定义在执行时进行错误测试的代码块。
catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
JavaScript 语句 try 和 catch 是成对出现的。
语法
try {
... //异常的抛出
} catch(e) {
... //异常的捕获与处理
} finally {
... //结束处理
}
错误类型
基本错误类型
执行代码期间可能发生的错误有多种类型,每种错误都有对应的错误类型。当错误发生时,就会抛出对应类型的错误对象。
Error是基本错误对象类型,其他错误类型都继承自该类型。Error类型的错误很少见,如果有也是浏览器抛出的。这个基本错误类型的主要目的是提供给开发人员抛出自定义错误的。
预定义错误类型
除基本错误以外,JavaScript提供的其他七种错误类型:(了解即可)
错误类型 | 说明 |
---|---|
EvalError | 表示错误的原因:与eval()有关。 |
InternalError. | 表示JavaScript引擎内部错误的异常。 |
RangeError | 表示错误的原因:数值变量或参数超出其有效范围。 |
ReferenceError. | 表示错误的原因:无效引用。 |
SyntaxError | 表示错误的原因: eval()在 解析代码的过程中发生的语法错误。 |
TypeError | 表示错误的原因:变量或参数不属于有效类型。 |
URIError | 表示错误的原因:给encodeURI()或decodeURI()传递的参数无效。 |
抛出语句
throw
语句
使用throw
语句抛出一个异常,当抛出异常,规定一个含有值的表达式要被抛出。
throw 语句允许我们创建自定义错误。
正确的技术术语是:创建或抛出异常(exception)。
如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。
语法:
throw exception;
异常可以是 JavaScript 字符串、数字、逻辑值或对象。
异常可以是 JavaScript 字符串、数字、逻辑值或对象。
实例:
function fn(v) {
if (v) {
return v;
}else{
throw 'undefined';
/*
throw语句- 人为抛出错误或异常
* 语法结构 - throw 异常或错误的表达式
*表达式允许是任意类型的内容
* 作用 - 预判断当前使用的变量、函数或对象是否存在
*/
}
}
// console.log(fn(10));
// console.log(fn());
var result;
try {
result = fn();
}catch (e){
result = 'unkown';
console.log(e);
}
console.log(result);