当前位置:朝夕网 » 数码科技 » javascript 异常处理的一些经验

javascript 异常处理的一些经验

写在前面为了提升应用稳定性,我们对前端项目开展了脚本异常治理的工作,对生产上报的js error进行了整体排查,试图通过降低脚本异常的发生频次来提升相关告警的准确率,结合最近在这方面阅读的相关资料,尝

写在前面

为了提升应用稳定性,我们对前端项目开展了脚本异常治理的工作,对生产上报的js error进行了整体排查,试图通过降低脚本异常的发生频次来提升相关告警的准确率,结合最近在这方面阅读的相关资料,尝试阶段性的做个总结,下面我们来介绍下js异常处理的一些经验。

先说概念什么是异常

先来看一下官方的定义:

Error objects are thrown when runtime errors occur. The Error object can also be used as a base object for user-defined exceptions.

描述的很简单,我们总结一下就是代码在执行过程中遇到了问题,程序已经无法正常运行了,Error对象会被抛出,这一点它不同于大部分编程语言里使用的异常对象Exception,甚至更适合称之为错误,应该说事实也确实如此,Error对象在未被抛出时候和js里其他的普通对象没有任何差别是不会引发异常的,同时Error 对象也可用于用户自定义错误的基础对象。

看下面两个例子:

执行结果

结论:只有在执行过程中的异常可以被捕获,语法解析阶段的异常或者不在当前同步任务中的异常都无法被捕获。

执行结果

以上红色信息里包含了异常信息(message)和栈跟踪(stack trace)信息,对于定位代码中的问题起到重要作用,可以看到栈跟踪是从底部文件位置21:15到顶部25:7位置的;前两个console在遇到异常时候未被执行,第二个script标签内的代码被正常执行。

结论:当任务执行过程中出现未处理的异常,会一直沿着调用栈一层层向外抛出(有点像事件冒泡),最终会导致当前任务被终止执行。当前任务终止后JS 线程会继续从任务队列中提取下一个任务继续执行。

异常的类型

错误名

描述

示例

EvalError

关于 eval [1]函数的错误,已不在当前ECMAScript规范中使用,不再会被运行时抛出。

throw new EvalError(&39;, &39;, 10); // 可以由业务代码主动抛出

RangeError

值不在允许的范围内,典型的是试图传递一个数值给一个范围内不包含该数值的函数,此时应该引发RangeError。

const numObj = 123;numObj.toFixed(-1); // Uncaught RangeError: toFixed() digits argument must be between 0 and 100 at Number.toFixed

ReferenceError

当一个不存在(或尚未初始化)的变量被引用时发生的错误。

const a = undefinedVariable; // Uncaught ReferenceError: undefinedVariable is not defined

SyntaxError

解析代码阶段,发现了不符合语法规范的代码。

const 111variable = 1; // Uncaught SyntaxError: Invalid or unexpected token

TypeError

类型错误,用来表示值的类型是非预期类型。

const a = null;a.doSomeThing(); // Uncaught TypeError: Cannot read properties of null (reading &39;)

URIError

使用URI处理函数产生的错误

decodeURIComponent(&39;) // U

点击链接查看原文,获取更多福利!

https://developer.aliyun.com/article/1058117?groupCode=alitech?utm_content=g_1000361548

以上就是朝夕生活(www.30zx.com)关于“javascript 异常处理的一些经验”的详细内容,希望对大家有所帮助!

免责声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如有侵权行为,请第一时间联系我们修改或删除,多谢。朝夕网 » javascript 异常处理的一些经验