JavaScript try/catch 及常见错误

312 阅读2分钟

JavaScript常见错误及其处理

一,try/catch语法

用于处理会发生错误的代码段,使用catch接收错误,不会影响try内代码继续执行,具体语法如下所示:

function tryCatch(values){  try {      values.split("")  } catch (err){      console.log(err,"接收js抛出的错误代码")    }}let newArr = [1,2,3,4,5]tryCatch(newArr)

上方代码一定会抛出 TypeError:values.split is not a function

二,finally扩展

使用finally可以无视try中的错误代码继续执行后续代码,具体语法如下所示:

function tryCatch(values){  try {      values.split("")  } catch (err){      console.log(err,"接收js抛出的错误代码")   } finally {    console.log(values)  }}let newArr = [1,2,3,4,5]tryCatch(newArr)

上述代码执行触发catch后会无视错误继续执行finally中的代码,try/catch中的finally一定会被执行

三,常见错误类型

1)Error

2)InternalError

3)EvalError

4)RangeError

5)ReferenceError

6)SyntaxError

7)TyperError

8)URIError

四,错误类型具体解析

1,Error 是基本错误类型,其他所有错误类型均继承自Error类型,该类型主要用作,开发人员自定义错误。

2,InternalError 数据类型的错误,在底层由JavaScript引擎抛出异常,例如,递归过多导致栈溢出,该错误一般无需处理,但是出现后一定是代码中的某处出现了问题或者由潜在危险。

3,EvalError 类型错误会在使用eval()函数发生异常时抛出,ECMA-262规定,“如果eval属性没有被直接调用(即没有将其名称作为一个 Identifier,也就是 CallExpression 中的 MemberExpression),或者eval被进行赋值操作 ”,就会抛出该错误:

new eval() //抛出EvalErroreval = foo //抛出EvalError

4,RangeError 在JavaScript中发生概率较低,一般由于数值越界导致,如:

const item1 = new Array(-10) //抛出RangeErrorconst item2 = new Array(Number.MAX_VALUE) //抛出RangeError

5,ReferenceError 会在找不到对象时触发(这就是著名的“Object expected”浏览器错误的原因)这种错误经常由于访问不存在的变量时触发,比如:

console.log(x) //访问未被定义的变量 x 会触发ReferenceError

6,SyntaxError 经常在给eval()传入的字符串包含JavaScript语法错误时抛出,比如:

eval("a ++ b") //抛出SyntaxError

7,TypeError 在JavaScript 中很常见,主要发生变量不是预期类型,或者访问到不存在的变量时。很多原因可能导致该类错误,尤其是使用数值特定的操作时,数值类型不正确时,如下:

let o = new 10; //抛出TypeError console.log("name" in true) //抛出TypeErrorFunction.portotype.toString.call("name") //抛出TypeError

8,URIError 只会在使用encodeURI()或decodeURI()但传入了格式错误的URI是出现。这个错误及其

难现,因为上述函数比较稳定。

五,利用返回错误类型进行继续操作

try {  someFunction()} catch(err){  if(err instanceof TypeError){    //返回的错误类型是TypeError时该干什么  }}