Javascript错误处理

320 阅读3分钟

这是我参与8月更文挑战的第31天,活动详情查看:8月更文挑战

每个前端开发都会用到浏览器调试,有了这个调试,我们可以更好的找到问题并解决问题。我们主要讲错误处理。

try/catch

try/catch语句是js处理异常的一种方式,它非常好理解,try里面是写我们的代码,catch是我们try中的代码如果出错怎么显示报错。

    try {
    //内容
    } catch (error){
        console.log(error,'xxx')
    };

如果try内容中有代码发生错误的话,直接就会跳出执行运行catch中的内容。我们试想一下,一个代码块写一个这样方法,这样我们找错就特别容易,尤其是多人开发同一项目。

finally子句

finally子句是try/catch中的可选内容,在前面说到如果写在try的内容出错了,会直接跳出并执行catch中内容。

加上finally子句的话,如果try内容无报错,则继续执行finally中内容。

如果try内容出错,先执行catch内容,然后执行finally内容,就算是return也不能阻止finally执行。

    try {
        bear //报错 未定义
    } catch (error){
        console.log(error,'xxx')
    } finally {
        console.log('jackson')
    };

image.png 这个有点像promise,我感觉还是很好理解的。

注意:当我们使用try/catch方法的时候,浏览器会认为错误被处理了。它很像php里的@ 屏蔽错误。这样只有我们程序开发者才能知道错误,用户是不知道的。

八种错误类型

一、Error

Error是基类型,其他错误类型都是继承该类型,主要用于自定义错误类型

二、InternalError

InternalError类型的错误会在底层JavaScript引擎抛出异常时由浏览器抛出.例如,递归过多导致了栈溢出.这类型并不是代码中通常要处理的错误。

三、EvalError

EvalError类型错误会在使用eval()函数发生异常时抛出 基本上,只要不把eval()当成函数调用就会报错

四、RangeError

RangeError会在数值越界时抛出.例如,定义数组时如果设置了不支持的长度,如-20.又或者没有给递归设置停止条件时触发.

五、ReferenceError

ReferenceError会在找不到对象时发生.(”object expected”浏览器错误的原因).这种错误经常是由访问不存在的变量而导致

六、SyntaxError

在给eval()传入的字符串包含JavaScript语法错误时发生

七、TypeError 类型错误 在给函数传参前没有验证的情况下,错误频繁发生

八、URIError 路径错误

自定义抛出错误 throw

throw是我们自定义抛出错误。throw必须有一个值,但值是什么不限制。

    function err(){
        throw new TypeError('我是jackson')
    }
    err();

使用throw,代码会立即停止并抛出我们传入的值。我们可以像我代码中定义自定义错误类型。

image.png