一、在我们平时写代码的时候,一旦js引擎去运行时候发现了错误就会抛出一个错误对象。
Javascript提供原生的构造函数Error()、所以的错误对象都是它的实例。
<script>
let x=new Error('错')
console.log(x.message);
console.log(x.__proto__);//打印结果如下图
</script>
实例对象的属性有:message:"“错误的提示信息”,
name:"错误名称“,
stack:"错误的堆栈”
利用 name和message可以对错误作出一个判断。
let x = new Error("错");
if (x.name) {
console.log(`错误的信息为:${x.message},错误的名称 为:${x.name}`);
}
二、Error实例对象为一般的错误对象、在它的基础上、javascript还定义了其他的六种错误对象。即存在Error()的6个派生对象。
- SynataxError对象:
SynataxError对象为解析代码时候发生的语法错误、例如:
let 1d="5" console.log(55); //Uncaught SyntaxError: Invalid or unexpected token
- ReferenceError对象
ReferenceError对象为引用一个不存在的变量发生的错误:例如:
console.log(a); //object.html:11 Uncaught ReferenceError: a is not defined
- RangeError对象
RangeError对象为一个值超出有效范围发生的错误、主要为函数栈堆超出最大值、数组的长度为负数等。
var x=new Array(-1)
console.log(x);//object.html:11 Uncaught RangeError: Invalid array length
4.TypeError对象
TypeError对象为变量或者参数不是预期时候发生的错误、例如用new关键字去new基本数据类型。
var x=new 5
console.log(x);//object.html:11 Uncaught TypeError: 5 is not a constructor
5.URlError对象
URIError对象是URI相关参数不正确抛出的错误、主要有:
encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数。
var x=decodeURI('%2')
console.log(x);//Uncaught URIError: URI malformed
- EvalError对象
eval函数没有被正确执行时候会抛出EvalError错误、该错误对象已经不在使用。
二、以上的6中派生的错位对象都是构造函数:这些构造函数都接收一个参数代表错误的提示信息。
var error=new Error('出错误了')
var synatax=new SyntaxError('语法出错了')
var Reference=new ReferenceError('引用了不存在的变量')
var range=new RangeError('超出范围我的了')
var type=new TypeError('类型错误、不是我预期的类型')
var URI=URIError('URI参数不正确')
三、 throw语句
throw语句用于手动抛出错误对象例如:
var x=2
if(x>1){
throw new Error('我自己抛出错误')
}
//object.html:13 Uncaught Error: 我自己抛出错误
// at object.html:13
四、try-catch语句
在我们写代码的时候如果报错代码就不会在往下执行、这时候我们可以利用try-catch语句去捕获错误。
var x=2
try {
if(x>1){
throw new Error('我自己抛出错误')
}
} catch (error) {
console.log(error);// Error: 我自己抛出错误
}
如果我们在写代码的时候不确定什么时候会报错,而且不想让代码终止执行,那么我们就可以把其放到try-catch中。
var x=2
try {
if(x>1){
throw new Error('我自己抛出错误')
}
} catch (error) {
console.log(error);// Error: 我自己抛出错误
}
console.log("11111"); //上面的错被try-catch捕获了、程序才能执行到我这里
五、 finally语句
我们可以在try-catch语句后面加上finally语句、无论程序执行结果如何、finally语句都会被执行。
var x=2
try {
if(x>1){
throw new Error('我自己抛出错误')
}
} catch (error) {
console.log(error);// Error: 我自己抛出错误
} finally{
console.log("我一定被执行");
}
console.log("11111"); //上面的错被try-catch捕获了、程序才能执行到我这里