js维护性技巧——抛出错误

173 阅读2分钟

javascript错误消息以信息稀少,隐晦含糊而臭名昭著,报错也不告诉你具体的错误原因,这会让问题复杂化,而如果出错后能跳出来一个错误描述:“由于发生了这些情况,所以干函数调用失败”,那么,调试错误就会变得更加简单,这就是抛出错误的好处

语法:thorw new Error("错误消息")

以下这个函数可以获取元素element下所有后代元素中的div元素,但如果传入的值为null呢?它只会报出一个Uncaught TypeError: Cannot read properties of null (reading 'getElementsByTagName'),这样的错误难免有些晦涩难懂

function getDivs(element){
            return element.getElementsByTagName("div")
        }

给它加上抛出错误的代码

 function getDivs(element){
            if(element && element.getElementsByTagName){
               return element.getElementsByTagName("div") 
            }else{
                throw new Error("getDivs():该函数传入的值必须为dom元素")
            }
        }

这样一来,如果传入的值不为dom元素,则报错:Uncaught Error: getDivs():该函数传入的值必须为dom元素,这样一来哪里出现了问题就一目了然了

javascript还提供了try—catch语句,它能在浏览器抛出错误时解析它,可能引发错误的代码放入try块中,处理错误的代码放入catch块中

例如:

try {
    somethingThatMightCauseAnError();
}catch(error){
    handleError(error)
}

当try块中发生错误,程序停止执行,跳到catch块,并传入错误对象,检查从错误中恢复的最佳动作,还可以增加一个finall块,它不管是否有错误发生,最后都会被执行

try {
    somethingThatMightCauseAnError();
}catch(error){
    handleError(error)
}finally {
    doSomething()
}

错误类型

七种错误类型
Error所有错误类型的基本类型
EvalError通过eval()函数执行代码发生错误时抛出
RangeError数字超过它的边界值时抛出
ReferenceError期待的对象不存在时抛出
SyntaxError给eval()函数传递的代码中有语法错误时抛出
TypeError变量不是期望的类型时抛出
URIError传递格式非法的URI字符串时抛出