红宝书阅读笔记!第十三天_错误处理与调试

335 阅读4分钟
JavaScript一直以来被认为是最难调试的编程语言之一,因为它是动态的,且多年来没有适当的开发工具。不过ECMAScript第3版引入了try/catch和throw语句,以及一些错误类型,几年后JavaScript调试器和排错工具开始在浏览器中出现。

浏览器错误报告

1.桌面控制台

最简单的查看错误的方式就是在控制台(Console)中。

2.移动控制台

移动端也有调试的办法,就不多说了。

错误处理

错误处理很重要,服务器端团队会花费很大的精力根据错误类型、频率和其他重要指标来定义规范的错误日志机制。最终实现通过简单的数据库查询或报告生成脚本就可以了解应用程序的运行状态。

良好的错误处理策略可以让用户知道到底发生了什么,所以要理解各种捕获和处理JavaScript错误的方式。

1.try/catch语句

try{
	//可能出错的代码
}catch(error){
	//出错时要做点什么
}

如果try模块中有错,那么就会立即退出执行,跳入catch块中,此时catch会接收到一个对象,这个对象包含着错误的相关信息。即使在catch块中不使用错误对象,也要定义名称。对象的各种属性因浏览器而异,但都会返回保存错误信息的message属性,ECMA-262中也定义了name属性,必要时可以👇

try{
	window.someNonexistentFunction();
}catch(error){
	console.log(error.message);
}

1.finally子句

try/catch语句中可选的finally子句使用运行。如果没有错误try块中运行完,则接着执行finally块中代码,若出错执行catch块中代码,则finally块中依然执行。

并且,若代码中包含finally子句,则try、catch中的return语句会被忽略,这一点很重要。

2.错误类型

共八种类型👇

⚪Error:基类型,其他错误都继承该类型。因此,所有错误都共享相同的属性。这个类型一般用于开发者抛出自定义错误。

⚪InternalError:这个类型的错误会在底层JavaScript引擎抛出异常时又浏览器抛出。比如递归过多导致栈溢出

⚪EvalError:这个类型的错误的发生是因为eval()函数发生异常。不要把eval()当成函数调用

⚪RangeError:数值越界时会报错。

⚪ReferenceError:会在找不到对象时发生。

⚪SyntaxError:一般在给eval传入字符串包含JavaScript代码中的语法错误时发生。

⚪TypeError:这个错误类型比较常见,一般发生在变量不是预期类型,或者访问不存在的方法时出现。

⚪URIError:只会在使用encodeURI()或decodeURI()但传入了格式错误的URI时发生。这个是JavaScript中难得一见的错误了,因为上面两个函数非常稳健。

不同的错误类型可用于为异常提供更多信息,以便实现适当的错误处理逻辑。可以使用instanceof·操作符来确定错误类型👇

try{
	somFunction();
}catch(error){
	if(error instanceof TypeError){
    	//处理类型错误
    }else if(error instanceof ReferenceError){
    	//处理引用错误
    }else if{
    	//处理所有其他类型错误
    }
}

2.抛出错误

与try/catch语句对应的一个机制是throw操作符,用于在任何时候抛出自定义错误。throw操作符必须有一个值,但值得类型不限。

使用throw操作符时,代码立即停止执行,除非try/catch语句捕获到抛出的值。

throw new RangeError("你到底要嘎哈?我不认识那么多位数")

此外,通过继承Error也可以创建自定义得错误类型,创建自定义错误类型时,需要提供name属性和messages属性。

关于何时抛出错误以后遇到时会补充。

3.error事件

没有被try/catch语句处理得错误都会在window对象上触发error事件。

4.错误处理策略

5.识别错误

一般要注意三类错误👇

⚪类型转换错误

⚪数据类型错误

⚪通信错误

1.静态代码分析器

2.类型转换错误

3.数据类型错误

4.通信错误

6.区分重大与非重大错误

7.把错误记录在服务器中

啊,真的不是在水,这些东西对我第一次学来讲有点深奥,一次都没有用过一次也没有遇见过,书上讲的好不好我都没有一个判断的标准,有些东西我也不知道有没有用。崩溃😩

文章内容参考:JavaScript高级程序设计(第四版)

标题样式来自:juejin.cn/post/684490…

哪里写错了就联系我🐧:54269504

个人网站:supersky.fun