前言
今日话题, 了解 JavaScript 的错误处理机制.
一, ReferenceError
引用一个不存在的变量时发生的错误. 将一个值分配给无法分配的对象, 比如对函数的运行结果或者函数赋值.
举栗子
- try {
- console.log(a) // a 未声明的变量
- } catch (e) {
- if (e instanceof ReferenceError) {
- console.log(e.name + ":" + e.message); // ReferenceError: a is not defined
- }
- }
构建一个 ReferenceError
- try {
- throw new ReferenceError('Hello', 'someFile.js', 10);
- } catch (e) {
- console.log(e instanceof ReferenceError); // true
- console.log(e.message); // "Hello"
- console.log(e.name); // "ReferenceError"
- console.log(e.fileName); // "someFile.js"
- console.log(e.lineNumber); // 10
- console.log(e.columnNumber); // 0
- console.log(e.stack); // "@Scratchpad/2:2:9\n"
- }
如果未声明变量就使用, 就会抛出这个异常哦!
二, TypeError
变量或参数不是预期类型时发生的错误. 比如使用 new 字符串, 布尔值等原始类型和调用对象不存在的方法就会抛出这种错误, 因为 new 命令的参数应该是一个构造函数.
举栗子
- try {
- var a = {}
- a.go()
- } catch (e) {
- if (e instanceof TypeError) {
- console.log(e.name + ":" + e.message); // TypeError: a.go is not a function
- }
- }
三, EvalError
在 ES5 以下的 JavaScript 中, 当 eval() 函数没有被正确执行时, 会抛出 evalError 错误.
举栗子
- var myEval = eval;
- myEval("alert('call eval')");
ES5 以上的 JavaScript 中已经不再抛出该错误, 但依然可以通过 new 关键字来自定义该类型的错误提示.
四, RangeError
数值变量或参数超出其有效范围
举栗子
- try {
- [].length = -1
- } catch (e) {
- if (e instanceof RangeError) {
- console.log(e.name + ":" + e.message); // RangeError: Invalid array length
- }
- }
五, SyntaxError
语法错误, 比如变量名不规范
举栗子
- try {
- var 1
- } catch (e) {
- if (e instanceof SyntaxError) {
- console.log(e.name + ":" + e.message); // SyntaxError: Unexpected number
- }
- }
六, URIError
给 encodeURI() 或 decodeURl() 传递的参数无效
举栗子
捕获一个 URIError
- try {
- decodeURIComponent('%');
- } catch (e) {
- console.log(e instanceof URIError); // true
- console.log(e.message); // "malformed URI sequence"
- console.log(e.name); // "URIError"
- console.log(e.fileName); // "Scratchpad/1"
- console.log(e.lineNumber); // 2
- console.log(e.columnNumber); // 2
- console.log(e.stack); // "@Scratchpad/2:2:3\n"
- }
创建 URIError 实例
- try {
- throw new URIError('Hello', 'someFile.js', 10);
- } catch (e) {
- console.log(e instanceof URIError); // true
- console.log(e.message); // "Hello"
- console.log(e.name); // "URIError"
- console.log(e.fileName); // "someFile.js"
- console.log(e.lineNumber); // 10
- console.log(e.columnNumber); // 0
- console.log(e.stack); // "@Scratchpad/2:2:9\n"
- }
兼容性
来源: https://www.cnblogs.com/ifannie/p/11448553.html