throw语句以及throw “error“ 和 throw new Error(“error“)的区别

news2024/11/27 5:39:36

文章目录

  • 什么是 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/393194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AOP的另类用法 (权限校验自定义注解)

👳我亲爱的各位大佬们好😘😘😘 ♨️本篇文章记录的为 AOP的另类用法 (权限校验&&自定义注解) 相关内容,适合在学Java的小白,帮助新手快速上手,也适合复习中,面试中的大佬🙉&#x1f649…

磁盘存储和文件系统管理

磁盘存储和文件系统管理1. 磁盘结构1.1设备文件1. 设备类型:2. 磁盘设备的设备文件命名:3. 虚拟磁盘:4. 不同磁盘标识:a-z,aa,ab…5. 同一设备上的不同分区:1,2, ...6. 创建设备文件7. 工具 dd常用选项示例demo8. hexd…

maven的安装配置

目录 1. Maven的安装配置 1.1检测jdk的版本 1.2下载maven 1.3配置maven环境变量 2.认识maven的目录结构 2.1 创建一个文件夹作为项目的根目录 1.创建如下结构的目录 2. 在pom.xml文件中写入如下内容(不用记忆) 3.在mian-->java--》下边创建java文件​编辑 4.cmd下…

XGboost部分细节补充

XGBoost算法原理详解与参数详解 R语言XGBoost参数详解 XGBoost部分细节补充1. XGBoost线性模型的实现2.XGBoost对二分类和多分类的处理方法1. XGBoost线性模型的实现 前面文章中已经详细的介绍了XGBoost基于决策树的实现,今天我们主要介绍XGBoost基于线性模型的实现…

模式识别 —— 第二章 参数估计

模式识别 —— 第二章 参数估计 文章目录模式识别 —— 第二章 参数估计最大似然估计(MLE)最大后验概率估计(MAP)贝叶斯估计最大似然估计(MLE) 在语言上: 似然(likelihood&#xf…

【Git】P1 Git 基础

Git 基础Git 基本概念集中式版本控制工具 与 分布式版本控制工具Git 下载与安装Bash 初始设置创建本地仓库Git 三区概念一个简单的提交流程更改文件后再次提交git 实现版本切换查看提交日志设置 git 快捷键版本切换(一)版本切换(二&#xff0…

华为OD机试题,用 Java 解【数据分类】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

0104路径搜索和单点路径-无向图-数据结构和算法(Java)

文章目录2 单点路径2.1 API2.2 算法实现后记2 单点路径 单点路径。给定一幅图和一个起点s,回答“从s到给定的目的顶点v是否存在一条路径?如果有,找出这条路径。”等类似问题。 2.1 API 单点路径问题在图的处理邻域中十分重要。根据标准设计…

PHP, Python和Java的区别

PHP, Python和Java是广泛使用的编程语言。每种编程语言都有其独特的优点和缺点。在本文中,我们将对这些编程语言进行分析,并探讨它们在不同应用场景中的最佳用途。一、PHPPHP是一种广泛使用的Web编程语言,它可以在服务器上运行,并…

程设 | week2:STL

📚回顾C 🐇struct和class 从功能上说,struct和class几乎没什么区别在不显式声明的情况下,struct成员默认为public,class默认为private和c语言的struct不同,c的struct可以定义成员函数,重载运算…

G6绘制树形图(自定义节点、自定义边、自定义布局)

目录1 设计节点1.1 定义节点和文本1.2 增加节点1.3 自定义节点样式2 树图配置2.1 允许使用自定义dom节点2.2 内置行为自定义边layout布局demo1 设计节点 在 registerNode 中定义所有的节点 G6.registerNode(tree-node, {drawShape: function drawShape(cfg, group) {定义图中…

aws appconfig 理解和使用appconfig对应用程序进行动态配置

参考资料 Automating Feature Release using AWS AppConfig Integration with AWS CodepipelineDeploying application configuration to serverless: Introducing the AWS AppConfig Lambda extensionCreate a pipeline that uses Amazon AppConfig as a deployment provider…

秒懂算法 | 搜索基础

本篇介绍了BFS和DFS的概念、性质、模板代码。 01、搜索简介 搜索,就是查找解空间,它是“暴力法”算法思想的具体实现。 暴力法(Brute force,又译为蛮力法):把所有可能的情况都罗列出来,然后逐一检查,从中找到答案。这种方法简单、直接,不玩花样,利用了计算机强大的…

JavaScript 中的 String 类型 模板字面量定义字符串

ECMAScript 6新增了使用模板字面量定义字符串的能力。与使用单引号或双引号不同,模板字面量保留换行字符,可以跨行定义字符串: let str1 早起的年轻人\n喜欢经常跳步;let str2 早起的年轻人喜欢经常跳步;console.log(str1);// 早起的年轻人…

【游戏逆向】游戏玩家技能冷却分析

技能冷却对于不同的游戏有不同的存放方式,而技能冷却的遍历也大多不会和技能的普通属性放在一起,在《在**明月刀》这款游戏中,技能的冷却判断格外重要,因为技能的连贯性对打怪的效率影响很大。 我们需要找一个冷却相对较长的技能用来进行扫描和过滤,一般选择几十秒即可,…

【本周特惠课程】基于GAN的图像增强理论与实践(涵盖图像降噪、色调映射、去模糊、超分辨、修复等方向)...

前言欢迎大家关注有三AI的视频课程系列,我们的视频课程系列共分为5层境界,内容和学习路线图如下:第1层:掌握学习算法必要的预备知识,包括Python编程,深度学习基础,数据使用,框架使用…

Windows扫描工具RunScanner使用实验(21)

实验目的 掌握利用Runscanner扫描和分析电脑;预备知识 RunScanner是一个完全免费的Windows系统工具,您可以用它轻松地将隐藏在您系统中的autostart程序,spyware,adware,主页劫持,未经认证的驱动揪出来,并可以导入和导出报告以帮助别人或获取帮助.目前它可以…

华为OD机试题,用 Java 解【素数之积】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

C++中的利器——模板

前文本文主要是讲解一下C中的利器——模板,相信铁子们在学完这一节后,写代码会更加的得心应手,更加的顺畅。一,泛型编程想要学习模板,我们要先了解为什么需要模板,我们可以看看下面这个程序。int add(int&a…

MDK Keil5 创建Stm32工程-理论篇(这里以Stm32F103Zet6为例)

一、文件夹创建与文件说明整个工程可以粗略的划分为几个文件夹:BSP底层驱动比如GPIO\Timer等驱动文件CMSIS内核相关的文件Firmware生成的固件下载文件Mycode用户编写的相关文件,主要编写的文件都在这个文件夹里Project工程文件startup芯片启动文件STM32F…