Skip to content

Latest commit

 

History

History
executable file
·
104 lines (69 loc) · 2.79 KB

第15章 异常处理.md

File metadata and controls

executable file
·
104 lines (69 loc) · 2.79 KB

一、Errow

js 解析或执行时,一旦发生错误,引擎就会抛出一个错误对象。js 原生提供一个 Error 构造函数,所有抛出的错误都是这个构造函数的实例。Error 构造函数接受一个参数,表示错误提示,可以从实例的 message 属性读到这个参数。

const err = new Error("Validation fail!");
err.message 
// → "Validation fail!"

二、原生错误类型

Error 对象是最一般的错误类型,在它的基础上,JavaScript 还定义了其他6种错误,也就是说,存在 Error 的6个派生对象。

  1. SyntaxError:语法错误

    const 1a = 10;
    // ❌ Uncaught SyntaxError: Invalid or unexpected token
    
    if(true) {
        console.log('Hi);
    }             
    // ❌ Uncaught SyntaxError: Invalid or unexpected token
  2. ReferenceError:引用错误

    const b = a;
    // ❌ Uncaught ReferenceError: a is not defined
  3. TypeError:类型错误

    const bar = new 'Hi';
    // ❌ Uncaught TypeError: "Hi" is not a constructor
    
    const foo = {}; foo.test();
    // ❌ Uncaught TypeError: foo.test is not a function
  4. RangeError:范围错误

  5. URIError:URI 错误

  6. EvalError:eval() 函数中的错误

三、异常处理方案

1. throw

用于手动抛出一个异常,当程序运行过程中遇到无法继续执行的错误时,可以通过 throw 抛出一个异常来中断程序的执行并且提示错误信息。

throw Error('异常提示信息');
throw "异常提示信息";

通过 console.assert(condition, tips); 可以根据条件是否满足输出异常信息:

var age = 12;
console.assert(age > 18, "未满18岁!");

2. try…catch

用于捕获和处理可能抛出异常的代码块,如果 try 块中的代码抛出了异常,则会跳转到 catch 块中执行对应的异常处理逻辑。

try {
	alertt("Hello, World!");
}catch(err) {
	// 捕捉异常
	let des = "错误警告:" + err.message;
	alert(des);
}

Tips:try…catch 结构是 js 语言受到 Java 语言影响的一个明显的例子。这种结构多多少少是对结构化编程原则一种破坏,处理不当就会变成类似goto语句的效果,应该谨慎使用。

3. finally

try…catch 结构允许在最后添加一个 finally 代码块,无论是否发生异常,finally 块中的代码都会被执行。通常用于释放资源或者清理操作。

try {
  
} catch(err) {

} finally {

}

4. Promise.catch()

用于捕获 Promise 中 reject 状态的异常。

5. Window.onerror

可以在全局范围内捕获未被捕获的异常,但是需要注意该事件只能捕获同步代码执行过程中的异常,并且某些浏览器不支持该事件。