21错误与异常

错误与异常是什么

错误,指程序中的非正常运行状态,在其它编程语言中称为“异常”或“错误”。解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信息。

通过使用Javascript提供的异常处理语句,可以用结构化的方式来捕捉发生的错误,让异常处理代码与核心业务代码实现分离。

错误与异常处理在应用中的重要性是毋庸置疑的。任何有影响力的Web应用都需要一套完善的错误处理机制。

try…catch语句

try表示标记一块待尝试的语句,如果语句出现错误,则通过catch语句进行捕捉。

// 用于捕获指定语句块中的错误或异常
try {
  console.log(v); //调用未定义的变量 -> 报错
} catch (error) {
  // 用于处理try语句中的错误
  // error 表示try语句中出现错误的信息
  console.log("改变量未定义");
} finally {
  // catch语句无法处理try语句中的错误或异常时,执行finally语句中的内容
  console.log("");
}

finally表示最后执行,无论是走try还是catch都会执行finally语句。

throw语句

人为抛出错误或异常,语法结构throw 异常或错误的表达式。其表达式允许是任意类型的内容。作用为预判断当前使用的变量、函数或对象是否存在。

function fn(v) {
    if (v) {
        return v;
    } else {
        /**
     * throw 语句 - 人为抛出错误或异常
     * 语法结构
     *   - throw 异常或错误的表达式
     *   表达式允许是任意类型的内容
     * 作用 - 预判断当前使用的变量、函数或对象是否存在
     */
        // 真是情况下应抛出一个错误对象
        throw "undefined";
    }
}
// console.log(fn(10));
// console.log(fn());

var result;
try {
    result = fn();
} catch (e) {
    result = "unkown";
    console.log(e); // undefined
}

console.log(result); // unkown

嵌套try…catch语句

可以嵌套一个或多个try…catch语句。如果一个内部的try…catch语句没有捕捉块,将会启动匹配外部的try…catch语句的捕捉块。

注意:嵌套在catch语句块内。

try {
    console.log(0);
} catch (e) {
    try {
        console.log(1);
    } catch (e) {
        console.log(2);
    }
}

错误类型

基本错误类型

执行代码期间可能会发生的错误有多种类型,每种错误都有对应的错误类型。当错误发生时,就会抛出对应类型的错误对象。

Error是基本错误类型,其他错误类型都继承自该类型。Error类型的错误很少见,如果有也是浏览器抛出的。这个基本错误类型的主要目的是提供给开发人员抛出自定义错误的。

预定义错误类型

错误类型

说明

EvaError

表示错误的原因:与eval()有关。

internalError

表示JavaScript引擎内部错误的异常。

RangeError

表示错误的原因:数值变量或参数超出其有效范围。

ReferenceError

表示错误的原因:无效引用。

SyntaxError

表示错误的原因:eval()在解析代码的过程中发生的语法错误。

TypeError

表示错误的原因:变量或参数不属于有效类型。

URIError

表示错误的原因:给encodeURI()或decodeURI()传递的参数无效。

JavaScript 错误参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 六、中间件与跨域

    在路由相应之前就会执行中间件的内容,例如在中间件中进行赋值,这种就可以在路由执行时使用这个值。

    Dreamy.TZK
  • Python面向对象

    对象查找属性的顺序:先从对象空间找 ------> 类空间找 ------> 父类空间找 ------->…

    Dreamy.TZK
  • 前端课程——显示与隐藏

    参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/display

    Dreamy.TZK
  • Python3.x学习笔记[3]通过Py

    从网上学到很多东西,xlrd支持Python3.x,所以可以直接pip安装(至于PIP配置快捷方式和使用国内镜像加速下载以后和CX FREEZE以及SUBLIM...

    py3study
  • Android编程之Navigation项目迁移AndroidX踩坑记录

    androidx 是对 android.support.xxx 包的整理后产物。由于之前的support包过于混乱,所以,google推出了 androidX。

    宋天伦
  • Qt 第二步 槽与信号(一) 实现点击按钮并弹窗

    信号与槽是Qt中的核心,也是Qt的特有的。在Qt中信号与槽的关键字为slots、signals、emit。

    公众号 碧油鸡
  • 【从零学习OpenCV 4】图像二值化

    经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社...

    小白学视觉
  • Java中的异常处理1使用try,catch异常继承架构该抓还是该抛

    这个程序可以让用户输入任意个整数,以0作为结束的标志,最后会显示输入整数的平均值。 下面我们进行简单的测试

    desperate633
  • Qt 第二步 槽与信号(一) 实现点击按钮并弹窗

    信号与槽是Qt中的核心,也是Qt的特有的。在Qt中信号与槽的关键字为slots、signals、emit。

    公众号 碧油鸡
  • 从源码来理解slf4j的绑定,以及logback对配置文件的加载

      项目中的日志系统使用的是slf4j + logback。slf4j作为一个简单日志门面,为各种loging APIs(像java.util.logging,...

    青石路

扫码关注云+社区

领取腾讯云代金券