文章目录

  • 什么是 throw 语句?
  • throw 语句后面跟一个对象
  • Error 构造函数对象
  • 结论

什么是 throw 语句?

throw 语句用来抛出一个用户自定义的异常。当前函数的执行将被停止(throw 之后的语句将不会执行),并且控制将被传递到调用堆栈中的第一个 catch 块。如果调用者函数中没有 catch 块,程序将会终止。

语法:

throw 一个表达式 || 对象

例如:

throw "error";     // 抛出了一个值为字符串的异常
throw 42;       // 抛出了一个值为整数 42 的异常
throw true;     // 抛出了一个值为 true 的异常
console.log("aaa");
console.log("bbb");
console.log("ccc");

throw语句抛出的异常可以被 try...catch()... 语句捕获。例如:

try{throw "error";  // 只捕获第一个错误throw 42;throw true;
} catch (e){console.log(e);   // "error"
}
console.log("aaa");
console.log("bbb");
console.log("ccc");

throw 语句后面跟一个对象

你可以在抛出异常时指定一个对象。然后可以在catch块中引用对象的属性。

// 声明一个当用户信息报错时的构造函数
function UserInfo(message){this.message = message;this.name = "userInfoError";
}
// 分数判断,不及格则抛出用户信息错误对象
let score = 60;
if (score >= 70){console.log("考试及格");
} else {throw new UserInfo("考试不及格");
}


使用 try...catch()... 捕获错误:

try {if (score >= 70) {console.log("考试及格");} else {throw new UserInfo("考试不及格");}
} catch (error) {console.log(error);console.log(error.name + ": " + error.message);
}

Error 构造函数对象

Error 对象是 JavaScript 内建的一个对象。当运行时错误产生时,Error 对象会被抛出。Error 对象也可用于用户自定义的异常的基础对象。

除了通用的 Error 构造函数外,JavaScript 还有许多其他错误类型的构造函数,常见的有:

名称 内容
RangeError: 创建一个 error 实例,表示错误的原因:数值变量或参数超出其有效范围。
ReferenceError: 创建一个 error 实例,表示错误的原因:无效引用。
SyntaxError: 创建一个 error 实例,表示错误的原因:语法错误。
TypeError: 创建一个 error 实例,表示错误的原因:变量或参数不属于有效类型。
URIError: 创建一个 error 实例,表示错误的原因:给 encodeURI() 或 decodeURI() 传递的参数无效。

Error有两个常用的实例属性:name 和 message。

属性 释义
name: 构造函数内部决定的,无需传值。
message: 错误消息。对于用户创建的 Error 对象,这是构造函数的第一个参数提供的字符串。

使用:

let error = new Error("抛出一个异常");
console.log(error);

使用throw语句抛出当前错误:

throw new Error("抛出一个异常");

使用 try..catch()... 捕获错误:

try {throw new Error("抛出一个异常");
} catch (error) {console.log(error);  // error错误对象console.log(error.name + ": " + error.message);  // error.message为自定义错误信息
}


当 throw 语句后面抛出的时对象时,想要获取自定义的错误信息,需要拿取错误对象的 message 属性。

结论

throw "error"try...catch(error)... 捕获时,error 为自定义错误信息;
throw new Error("error")try...catch(error)... 捕获时,error 为错误对象,需要 error.message 获取自定义错误信息。

参考地址:
throw - JavaScript | MDN
Error - JavaScript | MDN

throw语句以及throw “error“ 和 throw new Error(“error“)的区别相关推荐

  1. Caffe编译踩坑(一):/usr/include/boost/system/error_code.hpp:233:21: error: looser throw specifier

    近期在尝试跑LiteFlowNet,需要编译caffe,因为服务器上已经安装了CUDA11.3,其采用的环境是CUDA8.0+Cudnn5.1,因此安装了CUDA8.0的相关文件,并安装了gcc-4. ...

  2. 【JS】try 和 throw 语句

    文章目录 throw 语句: try 语句: 嵌套用法: throw 语句: throw语句用来抛出一个用户自定义的异常. 当前函数的执行将被停止(throw之后的语句将不会执行),并且控制将被传递到 ...

  3. 流程控制介绍,顺序结构、分支结构、循环结构、Promise对象、throw语句、break和continue关键字

    流程控制 流程控制:指代码的执行顺序,有三种方式:顺序结构.分支结构.循环结构 顺序结构: 代码从上到下,从左到右的执行顺序. 分支语句: if语句.if-else语句.if-else if-else ...

  4. error: looser throw specifier for ‘virtual void Logger::log(nvinfer1::ILogger::Severity, const

    在运行yolov5+deepsort进行编译make时出现错误, 具体错误如下// logging.h:239:10:error: looser throw specifier for 'virtua ...

  5. makefile 的error looser throw specifier for ‘virtual ExceptionWithIflag::~ExceptionWithIflag

    seis07:/projdata3/info_fil/yqxu/opinion_mining/code[88] > make g++ -g -c main.c In file included ...

  6. [Error] looser throw specifier for ‘virtual MyOutOfRangException:MyOutOfRangExceptionO

    自己编写异常类的时候出现的错误 [Error] looser throw specifier for 'virtual MyOutOfRangException:MyOutOfRangExceptio ...

  7. TensorRT升级错误,plugins/poly_layer.h:19:21: error: looser throw specifier for ‘virtual int nvinfer1::

    在将tensorrt由7升级到8的过程中,遇到了如下错误 In file included from plugins/poly_layer.cpp:1:0: plugins/poly_layer.h: ...

  8. java throw与throws_基于Java中throw和throws的区别(详解)

    系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...

  9. [vb]On Error GoTo 0和On Error resume区别

    On Error GoTo 0 表示禁止当前过程中任何已启动的错误处理程序. On Error Resume Next 说明当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运 ...

最新文章

  1. 中国式姥姥上热搜感动无数人:有妈妈在,我才敢生娃
  2. ELFHash的理解
  3. C++primer: 引用与 const 引用
  4. pygame.rect中 Rect类 属性示意
  5. OpenJdk7编译
  6. Reactor三种线程模型与Netty线程模型
  7. 使用 Caddy 替代 Nginx,全站升级 https,配置更加简单
  8. python字符串的内建函数_Python 的字符串内建函数
  9. C语言 VS输入输出字符设置
  10. 控制连接数量和密码保护-flashcom教程 密码保护
  11. 移动端车牌识别sdk
  12. 入职阿里1年后,我才真正见识到它的真实模样
  13. 利用sql循环语句实现基本的数据累加和阶乘
  14. kms激活win10
  15. 说白了那就是在一个池里放些亲亲鱼
  16. abaqus个人总结 各种问题各种debug
  17. win7装xp(win7装xp双系统教程)
  18. 气传导耳机排名,值得入手的气传导耳机推荐
  19. 计算机主板 大 小,电脑主板选大的还是小的比较好?
  20. QPainter简述

热门文章

  1. Atom编辑器折腾记_(22)二次翻译快捷键【追加1.8新版本新增快捷键】
  2. 抓取得物数据出现验证码的解析思路
  3. 字节跳动算法工程师总结:成功入职阿里月薪45K
  4. 高效的中文字符串截取函数
  5. MPC轨迹跟踪——基于ROS系统和全向车实验平台
  6. RTSP,Java实现简单的RTSP报文交换
  7. 什么事aop,aop的作用是什么?aop在项目哪里使用到了
  8. html video标签canplay,HTML oncanplay事件用法及代码示例
  9. 【PM】软件项目管理流程和方法
  10. Bzoj3441 乌鸦喝水