javascript错误处理机制是什么

  介绍

小编给大家分享一下javascript错误处理机制是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

有时候,在自己封装的工具函数中,不传参或传入了错误类型的参数,也要适当的抛出一些错误以示警告;使用框架不正常情况下也会抛出错误,如果对错误一无所知,便无从下手调试。综合上,述了解错误的处理机制是多么必要。

以下是笔者归纳总结,如有误之处,欢迎指出。

错误构造函数
javascript规范中总共8中有错误类型构造函数
错误,错误对象
SyntaxError——解析过程语法错误
TypeError——不属于有效类型
ReferenceError——无效引用
RangeError——数值超出有效范围
URIError——解析URI编码出错
EvalError——调用eval函数错误
InternalError——javascript引擎内部错误的异常抛出,“递归太多“

其中两种做个特殊说明:
EvalError调用eval函数错误,已经弃用,为了向后兼容,低版本还可以使用。
InternalError递归过深抛出错误,多数浏览器未实现,属于非标准方法,生产环境禁用
继承关系
错误是错误的基类,其他类型都继承错误这个类,可以使用ES6中提供的Object.getPrototypeOf()来判断,一个类是否继承了另一个类。

console.log (Object.getPrototypeOf (SyntaxError)===错误);//正确的   console.log (Object.getPrototypeOf (TypeError)===错误);//正确的   console.log (Object.getPrototypeOf (RangeError)===错误);//正确的   console.log (Object.getPrototypeOf (URIError)===错误);//正确的   console.log (Object.getPrototypeOf (EvalError)===错误);//正确的   console.log (Object.getPrototypeOf (ReferenceError)===错误);//真正的

来聊一聊每一种错误类型的使用和出错的场景。

误差
通过错误的构造器可以创建一个错误对象。当运行时错误产生时,错误的实例对象会被抛出。
语法:新的错误([信息])
参数:

消息可选,错误描述信息。

抛出错误
使用扔语句来抛出异常
抛出新的错误(& # 39;这里抛出的是错误信息& # 39;)
运行后,会在控制台打印输出:
未捕获错误:这里抛出的是错误信息
注意:使用抛扔出异常后,之后的代码不再执行。

捕获错误
可以通过try {} catch(){}语句来捕获到这个错误

{试   把新的错误(& # 39;这里抛出的是错误信息& # 39;)   }   抓住(err) {   警报(err.name + & # 39;& # 39;+ err.message)   }

属性说明:

当使用新的错误创建错误实例后,会有两个属性:

让e=新的错误(& # 39;这里抛出的是错误信息& # 39;);
名称属性,为错误的类型,此时为错误
消息属性,为错误的信息,此时为& # 39;这里抛出的是错误信息& # 39;

SyntaxError
解析过程语法错误,这种类型抛出的错误有很多,往往是书写时候造成的语法错误,例如:

让n=11;//未捕获SyntaxError:无效的或意想不到的令牌   让str=癶el" lo"//未捕获SyntaxError:意想不到的标识符   让123 var=& # 39;你好# 39;//未捕获SyntaxError:无效的或意想不到的令牌

语法错误有很多就不一一列举了,当在浏览器运行时,控制台会抛错,并且告知第几行,所以调试器来比较方便。但要读懂错误的类型为SyntaxError,以及后面的错误信息,这样方便改错。

TypeError
不属于有效类型。这种错误就是在给的不是需要的类型而导致无法操作,会抛出类型错误。
变量或参数不是预期类型,
变量或参数不是预期类型
例如新<强> 强运算符后必须是函数,而给定的不是函数,则会抛出类型错误

让fn=& # 39;你好# 39;;   新的fn;

抛出错误:
未捕获TypeError: fn不是构造函数
调用对象不存在的方法

让obj={};   obj.fn ()

抛出错误:
未捕获TypeError: obj。fn不是一个函数
当然你也可以在封装函数时候,强制传入的参数为指定类型,否则抛出类型错误。

函数平(arr) {   如果(! Array.isArray (arr))   {   把新TypeError(& # 39;传入参数不是数组& # 39;)   }   }
javascript错误处理机制是什么