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字符串时抛出 |