常见「异常类型」傻傻分不清楚!- Error、SyntaxError、ReferenceError、TypeError

news/2024/7/19 15:20:03 标签: 编程语言, java, python, javascript, js
js_content">

无论是浏览器控制台还是 Node.js 的服务端,我们会在各种地方看到 JavaScript 异常,异常处理是编写程序必备的基础能力,在学习异常处理之前,了解 JavaScript 中的几种异常类型是非常有必要的。

Error

Error 是最基本的错误类型,其他的错误类型都继承自该类型。Error 对象主要有两个重要属性 messagename 分别表示错误信息和错误名称。

程序运行过程中抛出的异常一般都有具体的类型,Error 类型一般都是开发人员自己抛出的异常。

try {
  throw new Error('ConardLi抛出的异常');
} catch (error) {
  console.log(error);
}

SyntaxError - 语法错误

语法错误也称为解析错误。语法错误在任何编程语言中都是最常见的错误类型,表示不符合编程语言的语法规范。

JavaScript 是一门解释性语言,执行一段代码时需要经历 词法分析 -> 语法分析 -> 语法树 就可以开始解释执行了:

词法分析是将字符流(char stream)转换为记号流(token stream)、语法分析阶段会将记号流(token stream)生成抽象语法树(AST)。

在这两个阶段,如果 Javascript引擎发现了预期之外/无法抓换的 token,或者 token 顺序和预期不一致时,就会抛出 SyntaxError

因此 SyntaxError 应该和其他类型的异常区分开,此类异常发生在 JavaScript 解析/编译时,此类异常一旦发生,导致整个js文件都无法执行,而其他异常发生在代码运行时,这一类的错误会导致在错误出现的那一行之后的代码无法执行,但在那一行之前的代码不会受到影响。

TypeError - 类型错误

运行时最常见的异常,表示变量或参数不是预期类型,比如 new 关键字后面必须为构造函数、()前必须为函数。

ReferenceError - 引用错误

引用一个不存在的变量时发生的错误,每当我们创建或定义一个变量时,变量名称都会写入一个变量存储中心中。这个变量存储中心就像键值存储一样,每当我们引用变量时,它都去存储中找到 Key 并提取并返回 Value,如果我们要找的变量不在存储中,就会抛出 ReferenceError

请注意,如果我们调用的是一个已经存在的变量的一个不存在的属性,则不会抛出 ReferenceError,因为变量本身已经在存储中了,调用它不存在的属性只会是未定义状态,也就是 undefined:

RangeError - 边界错误

表示超出有效范围时发生的异常,主要的有以下几种情况:

  • 数组长度为负数或超长

  • 数字类型的方法参数超出预定义范围

  • 函数堆栈调用超过最大值

URIError - URL 错误

在调用 URI 相关的方法中 URL 无效时抛出的异常,主要包括 encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()和unescape()几个函数:

自定义异常

另外,为了满足各种各样的业务需求,除了 JavaScript 已经给定的异常类型,我们还可以自定义一些异常类型,比如我们要根据不同的异常类型给用户不同的错误提示:

class UnAuthError extends Error { }

class ParamError extends Error { }

function controller() {
  throw new UnAuthError();
}

try {
  controller();
} catch (error) {
  if (error instanceof UnAuthError) {
    return '无权限';
  } 
  if (error instanceof ParamError) {
  return '参数错误';
  } 
}

关于异常类型,你还有什么想问的?欢迎留言讨论,如果文章对你有帮助,希望你能不吝啬的献出【在看、点赞、分享】三连。


http://www.niftyadmin.cn/n/1252066.html

相关文章

一份【超级全面】的前端工程师的自检清单

开篇前端开发是一个非常特殊的行业,它的历史实际上不是很长,但是知识之繁杂,技术迭代速度之快是其他技术所不能比拟的。到现在为止,前端工程师已经成为研发体系中的重要岗位之一。可是,与此相对的是,我发现…

卧槽!VSCode 竟然可以整成小霸王游戏机??

文章授权转载自:gamedilong,文末有原文链接。今天给大家分享一下自己最近撸的一款 vscode 游戏插件,基于 vscode 的休闲放松利器。前言开始会先介绍该插件的安装使用方式,然后简单介绍下主要的开发步骤。安装&运行安装和其他的…

高频前端开发面试问题及答案整理

来自:csdnhttps://blog.csdn.net/p358278505/article/details/78718283说说你对闭包的理解使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造…

私藏!React 硬核涨薪指南

时至今日,React仍然是前端领域流行度最高的框架,毫不夸张的说,对于React的掌握程度,是影响面试结果和薪资水平的重中之重。而很多人虽然学习React多年,能够非常熟练地将其作为工具使用,但真正到了面试这种更…

「请查收」一份丰富的 Web 性能优化指南

我们都知道对于Web应用来说性能很重要。然而性能优化相关的知识却非常的庞大并且杂乱。对于性能优化需要做些什么以及性能瓶颈是什么,通常我们并不清楚(不包括那些对性能优化有丰富经验的高手)。事实上关于Web性能有很多可以优化的点&#xf…

1024 福利不能少「40个10.24红包+红宝书」

直接进入主题今天是1024,广大程序员的节日,来送福利!(下次送书,可留言想要的书,我下次买来送)多种方式抽奖,「凭手气、评论、在看」这三种方式都可以参与!感谢亲爱的读者…

热乎的滴滴前端面经「现在实习生面试也不简单呀」

滴滴前端实习面经滴滴是我投简历之后第二家面试的公司, 国庆节前两三天投的简历, 国庆后复工第一天就给我打了电话约一面。那时候因为还没什么面试经验,所以一面有些紧张,很多题虽然是八股题, 但因为都是第一次答&…

HarmonyOS特点,华为鸿蒙系统HarmonyOS的四大技术特点与三大新兴之处分析

华为鸿蒙系统HarmonyOS的关键在于生态,华为为开发者提供了可以实现“一次开发、多端部署”的高效开发工具,共同为消费者打造全场景智慧化的极致体验。在华为开发者大会2020将在广东东莞松山湖再次启动之际,我们来回顾一下华为鸿蒙系统Harmony…