throw语句以及throw “error“ 和 throw new Error(“error“)的区别
文章目录
- 什么是 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“)的区别相关推荐
- 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. ...
- 【JS】try 和 throw 语句
文章目录 throw 语句: try 语句: 嵌套用法: throw 语句: throw语句用来抛出一个用户自定义的异常. 当前函数的执行将被停止(throw之后的语句将不会执行),并且控制将被传递到 ...
- 流程控制介绍,顺序结构、分支结构、循环结构、Promise对象、throw语句、break和continue关键字
流程控制 流程控制:指代码的执行顺序,有三种方式:顺序结构.分支结构.循环结构 顺序结构: 代码从上到下,从左到右的执行顺序. 分支语句: if语句.if-else语句.if-else if-else ...
- 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 ...
- 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 ...
- [Error] looser throw specifier for ‘virtual MyOutOfRangException:MyOutOfRangExceptionO
自己编写异常类的时候出现的错误 [Error] looser throw specifier for 'virtual MyOutOfRangException:MyOutOfRangExceptio ...
- 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: ...
- java throw与throws_基于Java中throw和throws的区别(详解)
系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...
- [vb]On Error GoTo 0和On Error resume区别
On Error GoTo 0 表示禁止当前过程中任何已启动的错误处理程序. On Error Resume Next 说明当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运 ...
最新文章
- 中国式姥姥上热搜感动无数人:有妈妈在,我才敢生娃
- ELFHash的理解
- C++primer: 引用与 const 引用
- pygame.rect中 Rect类 属性示意
- OpenJdk7编译
- Reactor三种线程模型与Netty线程模型
- 使用 Caddy 替代 Nginx,全站升级 https,配置更加简单
- python字符串的内建函数_Python 的字符串内建函数
- C语言 VS输入输出字符设置
- 控制连接数量和密码保护-flashcom教程 密码保护
- 移动端车牌识别sdk
- 入职阿里1年后,我才真正见识到它的真实模样
- 利用sql循环语句实现基本的数据累加和阶乘
- kms激活win10
- 说白了那就是在一个池里放些亲亲鱼
- abaqus个人总结 各种问题各种debug
- win7装xp(win7装xp双系统教程)
- 气传导耳机排名,值得入手的气传导耳机推荐
- 计算机主板 大 小,电脑主板选大的还是小的比较好?
- QPainter简述