js中常见的error类型和error处理

1.错误类型

Error:所有错误的父类型

ReferenceError:引用的变量不存在

/* ReferenceError:引用的变量不存在 */
console.log(a);//ReferenceError: a is not defined
console.log("出错之后");//没有输出

注意:如果代码出现报错,后面的程序不会继续执行。如果没有得到预期的结果时,注意查看此前是否报错。如果想出现报错后,依旧继续执行程序,可以参考下面捕获错误代码。

TypeError:数据类型错误

/* TypeError:数据类型不正确的错误 */
let b = null;
console.log(b.xxx);//当b为null不具备可以.属性或功能 TypeError: Cannot read properties of null (reading 'xxx')

let b = {};
console.log(b.xxx);//当b为对象时,只要.了,那么这个对象就有了这个属性,只是没有赋初始值,所以结果为undefined
b.xxx();//这里b.xxx()不是一个函数,函数才可以调用。TypeError: b.xxx is not a function
let d = 3;
console.log(d.xxx);//undefined

//Number(Boolean,String)是内置对象 上面的代码在执行的时候会自动译为下面的代码
let d = new Number(3);//此时d是Number的实例对象
console.log(b.xxx);//new Number(3).xxx 结果为undefined

RangeError:数据值不在其所允许饿范围内

/* RangeError:数据值不在其所允许的范围内 */
function fn(){//无限递归
	fn();
};
fn();//RangeError: Maximum call stack size exceeded
//递归一般都要有条件,用来控制执行的次数,上面的是无限递归,超出了最大范围

SyntaxError:语法错误

/* SyntaxError:语法错误 */
const c = """";//SyntaxError: Unexpected string

2.错误处理的两种方式

捕获错误:try...catch

抛出错误:throw error

3.错误对象

message属性:错误相关信息

stack属性:函数调用栈记录信息

/* 捕获error */
try {
	//可能出现错误的代码
	const e = {};
	e();
} catch (error) {
	//捕获打印错误信息
	console.log(error.message);
	console.log(error.stack);
};
//继续执行程序
console.log("------");

/* 抛出error */
function doThing() {//当前时间如果为奇数就能正常干活,否则不能干
    const time = Date.now();
    if (time % 2 == 1) {
        console.log("当前时间为奇数,可以正常工作...");
    } else {//不能干活,得告诉调用者
        throw new Error("当前时间为偶数,干不了" + time);//抛出错误
    };
};
try {
    doThing();
} catch (error) {
    alert(error.message);
};

猜你喜欢

转载自blog.csdn.net/weixin_55992854/article/details/120475105