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时该干什么 }}