在平时的开发中 如果能精确的定位错误的类型 能够提高很多的开发效率
下面列举一些常见的错误类型
- ReferenceError 引用的变量不存在 !!!
//引用了一个不存在的变量 ReferenceError: a is not defied
console.log(a)
- TypeError 数据类型不正确的错误 !!!
//因为b是undefined 所以不能去读b的xxx属性
//这属于类型错误了 你这个类型没有这个属性和方法 就报错
let b = undefined
//TypeError:cannot read property 'xxx' of undefined
console.log(b.xxx)
- RangeError 数据值不在其所允许范围内!!!
//RangeError: Maximum call stack size exceeded
function fn(){
fn() //函数调用是有次数限制的 超出了最大次数的限制 栈溢出
}
fn()
- SyntaxError 语法错误!!!
// SyntaxError: Unexpected string 不希望出现这样的字符串
const a=""""
错误处理
- 捕获错误
try...catch
– 一般错误了都会被卡住 就无法执行后面的代码
– 如果把错误捕获住了 就可以跳过去执行后面的代码
try {
let b;
console.log(b.xxx);
} catch (err) {
console.log(err.message); //错误的文本 相关的信息
console.log(err.stack); //错误的一些执行信息
}
//因为错误被我们捕获处理了 所以还可以继续执行后面的代码
console.log('出错之后');
- 抛出错误
throw error
– 因为内部无法提示错误
– 所以故意new一个错误的信息来提示
– 然后用错误的捕获去执行代码
function tIme() {
//声明一个函数
if (Date.now() % 2 == 1) {
//判断时间为奇数 就不报错
console.log("当前时间为奇数,可以执行任务");
} else {
//如果为偶数就用throw new Error去new一个Error的错误对象 让他故意报错
throw new Error("当前时间为偶数,无法执行任务");
}
}
//如果直接调用函数的话 万一是偶数 就报错了 就不会执行下面的代码
//所以我们需要把错误给捕获了 捕获了错误后 就算遇到了错误 也会执行后面的代码
try {
tIme(); //在try里调用这个函数
} catch (err) {
//err错误的对象 里面有参数 文本信息和错误信息
console.log(err.message); //如果发生了错误 就打印err对象的文本信息
}
console.log(1111); //既然捕获了错误 就算错误了也可以执行后面的代码了