当前位置: 首页 > news >正文

JavaScript语言 Error对象及错误处理机制 原生错误类型

Error实例对象

JavaScript解析或运行时,一旦发生错误,引擎就会抛出一个错误对象。

JavaScript原生提供Error构造函数,所有抛出的错误都是这个构造函数的实例。

JavaScript语言标准只提到,Error实例对象必须有message属性,表示出错时的提示信息,没有提到其他属性。因此:message:错误提示信息;name:错误名称(非标准属性);stack:错误的堆栈(非标准属性),stack属性用来查看错误发生时的堆栈。

const error = new Error('错误');
console.log(error.message) // "错误"
console.log('error.name = ', error.name);  // Error
console.log('error.stack = ', error.stack);  // Error: 错误

错误处理机制

try-catch语句,捕获和处理异常的常见方式,它允许在try块中执行可能引发异常的代码,并在 catch块中处理异常。

finally块中的代码始终会被执行,无论是否发生异常,通常用于确保资源的释放或清理工作。

try {// 可能抛出错误的代码throw new Error("This is a generic error");
} catch (error) {// 捕获错误并进行处理console.error(error.message);
} finally {// 在发生异常或未发生异常时都执行的代码console.log("Finally block executed");
}
async function checkAge(age) {if (age < 18) {throw new Error("年龄必须大于或等于18岁!");}return "年龄符合要求!";
}async function exec(age) {try {let result = await checkAge(age);console.log(result);} catch (error) {console.log('e instanceof Error ', error instanceof Error);console.log('error.name = ', error.name);  // 错误名称(非标准属性)console.log('error.stack = ', error.stack);  // 错误的堆栈(非标准属性)console.log(error.message);  // 输出:年龄必须大于或等于18岁}finally{console.log('始终会被执行.');}
}exec(12);

原生错误类型

SyntaxError对象是解析代码时发生的语法错误。

try {eval("Hello World");
} catch (error) {if (error instanceof SyntaxError) {console.error("SyntaxError:", error.message);} else {console.error("Other Error:", error.message);}
}

ReferenceError对象是引用一个不存在的变量时发生的错误。

try {console.log() = 1
} catch (error) {if (error instanceof ReferenceError) {console.error("ReferenceError:", error.message);} else {console.error("Other Error:", error.message);}
}

RangeError对象是一个值超出有效范围时发生的错误。

try {new Array(-1);
} catch (error) {if (error instanceof RangeError) {console.error("RangeError:", error.message);} else {console.error("Other Error:", error.message);}
}

TypeError对象是变量或参数不是预期类型时发生的错误。

try {new 123;
} catch (error) {if (error instanceof TypeError) {console.error("TypeError:", error.message);} else {console.error("Other Error:", error.message);}
}

URIError对象是 URI 相关函数的参数不正确时抛出的错误,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()这六个函数。

try {decodeURI('%2')
} catch (error) {if (error instanceof URIError) {console.error("URIError:", error.message);} else {console.error("Other Error:", error.message);}
}

http://www.lryc.cn/news/589882.html

相关文章:

  • Matlab数字图像处理——基于图像分割与模板匹配的的车牌识别系统
  • orfeotoolbox ResetMargin
  • mongoDB初始化项目简单操作示例
  • Windows 启动后桌面黑屏,其他程序正常运行
  • ARCGIS PRO DSK 颜色选择控件(ColorPickerControl)的调用
  • MySQL 8.0 OCP 1Z0-908 题目解析(28)
  • 数据库(five day)——物物而不物于物,念念而不念于念。
  • JAVA面试宝典 -《分布式ID生成器:Snowflake优化变种》
  • uniapp+vue3+鸿蒙系统的开发
  • Rust入门之并发编程基础(三)
  • Android开发知识点总结合集
  • 基于docker的redis集群
  • 智慧公厕系统打造洁净、安全的公共空间
  • 嵌入式学习笔记--MCU阶段--DAY06DHT11练习
  • java反序列化:CC1链深度剖析
  • EP01:【NLP 第二弹】自然语言处理概述
  • SFT:大型语言模型专业化定制的核心技术体系——原理、创新与应用全景
  • PDF 转 Word 支持加密的PDF文件转换 批量转换 编辑排版自由
  • AFFiNE开源知识管理和协作平台的部署,替代Notion不是梦~
  • Linux Ubuntu apt包管理器安装K8s1.30.1+Ingress-Nginx
  • 【Vue】tailwindcss + ant-design-vue + vue-cropper 图片裁剪功能(解决遇到的坑)
  • flink sql读hive catalog数据,将string类型的时间戳数据排序后写入kafka,如何保障写入kafka的数据是有序的
  • Clip微调系列:《coOp: learning to prompt for vision-language models》
  • Python 进阶学习之全栈开发学习路线
  • Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中创建甘特图
  • Apache RocketMQ + “太乙” = 开源贡献新体验
  • 【C#】实体类定义的是long和值识别到的是Int64,实体类反射容易出现Object does not match target type
  • 查看.bin二进制文件的方式(HxD十六进制编辑器的安装)
  • Golang学习之常见开发陷阱完全手册
  • 【深度学习】神经网络-part3