例如acynk去请求报错了,可以打印错误,并继续代码运行
执行流程:
先执行try中的语句,如果有错误,就会将错误抛出,并且被catch捕获并去执行
,这时候就会执行catch里的语句,而且不论try中有没有抛出和错误,finally语句都会去执行其中自己的代码块
我们来看下常见的一些错误:
console.log(a);//Uncaught ReferenceError(引用错误): a is not defined
var b = 'hello'
b();//Uncaught TypeError(类型错误): b is not a function
我们来看下try-catch的用法:
try { console.log(a);
} catch {
/ 一旦代码出错,自动执行catch语句,
console.log('代码出错了');
}
注意: !!!!!!!!! 如果不需要输出错误信息,catch 后不需要()
如果需要输出错误信息,对错误进行处理; catch 需要() 并且需要传入一个参数err (就是错误信息,这里用err语义化,可以用a);
try {
console.log(a);
} catch (err) {
// 捕获 err 就是错误信息,
console.log(err);
}
我们看到这个输出结果和下面这样的信息相同
finally 不管代码是否出错,都会执行
先来看不出错的情况
try {
console.log(1);
} catch (err) {
console.log(err);
} finally {
// finally此处的代码始终都会执行
console.log('代码执行了');
}
try {
console.log(a);
} catch (err) {
console.log(err);
} finally {
// finally此处的代码始终都会执行
console.log('代码执行了');
}
1.SyntaxError(语法错误)
2.ReferenceError(引用错误)
3.RangeError(范围错误)
4.TypeError(类型错误)
5.URLError(URL错误)
6.EvalError(eval错误)
其中,Error是基类型,其他错误类型都继承自该类型。因此,所有错误类型共享了一组相同的属性。Error类型的错误很少见,如果有也是浏览器抛出的;这个基类型的主要目的是供开发人员抛出自定义错误
【EvalError(eval错误)】
eval函数没有被正确执行时,会抛出EvalError错误。该错误类型已经不再在ES5中出现了,只是为了保证与以前代码兼容,才继续保留
【RangeError(范围错误)】
RangeError类型的错误会在一个值超出相应范围时触发,主要包括超出数组长度范围以及超出数字取值范围等
new Array(-1); //Uncaught RangeError: Invalid array length
【ReferenceError(引用错误)】
引用一个不存在的变量或左值(lvalue)类型错误时,会触发ReferenceError(引用错误)
console.log(a);//Uncaught ReferenceError(引用错误): a is not defined
【SyntaxError(语法错误)】
当不符合语法规则时,会抛出SyntaxError(语法错误)
【TypeError(类型错误)】
在变量中保存着意外的类型时,或者在访问不存在的方法时,都会导致TypeError类型错误。错误的原因虽然多种多样,但归根结底还是由于在执行特定类型的操作时,变量的类型并不符合要求所致
var b = 'hello'
b();//Uncaught TypeError(类型错误): b is not a function
【URIError(URI错误)】
URIError是URI相关函数的参数不正确时抛出的错误,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数
decodeURI('%2'); // URIError: URI malformed