Javascript程序异常处理

什么是异常,异常就是我们在编写Javascript程序时出现的一些错误,并会在控制台中抛出这个错误,出现异常其实并不是一件坏事,相对的呢它可以提醒我们开发人员哪里出现了错误,方便我们后续的修改,能让我们的代码更加的流畅丝滑的运行,如果你对程序异常还不了解,看完该篇会让你对异常有一个初步的了解,也能在出现异常时做出相应的处理。

目录

1.异常的分类

 2.异常的执行流程

 3.捕获异常

 4.手动抛出异常

 5.总结


1.异常的分类

在Javascript中,异常通常表现为一个对象,不同的对象表达了不同的异常类型,不同类型的异常对应着不同的错误。

异常类型含义
SyntaxError  语法错误
ReferenceError引用错误,使用了不存在的变量或函数
TypeError

类型错误,往往是使用了一个对象中不存在的成员 

RangeError范围错误,通常在操作超出有效范围时发生,如数组访问超出边界
URIErrorURI错误,通常发生在encodeURI()或者decodeURI()等方法时给出无效的URI时发生
EvalErroreval错误,通常在eval()函数中执行代码时发生错误
InternalError内部错误,通常发生在Javascript引擎内部发生错误导致

举几个常见的错误类型的例子

1.语法错误

 const user = [name: 'zs', age: 18]

我上面的这段代码是一个很明显的语法错误,错把数组当成了对象来存储数据,这时候控制台就会报语法错误的提示

 2.引用错误

 function get() {
      console.log(111);
    }
 set()

我这段代码定义了一个get()函数,但是我们调用的是set()方法,看控制台的报错信息

 3.类型错误

let arr = { name: '111' }
arr.push(222)

 我这里定义了一个对象,但是后续调用了push()方法,这个方法只有数组才有的,所以此时就会报这个类型错误

 其实呢,所有的错误都是以对象形式存在的,比如我们也可以自定义一个错误,并将其打印出来

    let err = new TypeError('arr.push is not a function')
    console.error(err);

控制台也会输出相应的错误

 2.异常的执行流程

当代码在执行过程中遇到了错误,会发生什么事情?

1.自动创建对应的异常对象,抛出错误

2.程序终止运行,我们知道js代码是从上到下依次运行的,如果前面出现错误,后面的代码也就不会执行了

3.控制台会显示异常对象,异常对象中包含了二个信息:程序异常的类型和原因,以及会描述出程序异常出现的位置

看下面这个例子

   function A() {
      console.log('start A');
      B()
      console.log('end A');
    }
    function B() {
      console.log('start B');
      C()
      console.log('end B');
    }
    function C() {
      console.log('start C');
      let a;
      console.log(a.name); //这里会出现错误
    }
    A()
    console.log('程序执行完毕');

初步分析我们可以知道 a.name这是一个典型的类型错误,a并不像一个对象

控制台信息:

 可以很清楚的看到代码并没有执行完就终止了,因为中途遇到了错误导致的

报错信息也很详细的告诉了我们程序出错的原因,以及它出现的位置,并且这个报错信息会将有关的成员全部牵扯进来,最终的错误原因是因为在C()函数中的第52行,间接原因是B()中调用了C(),A()中调用了B(),总路线中出现的错误在54行,很清楚的描述了错误信息。

 3.捕获异常

捕获异常说白了就是去捕获在代码运行时可能会发生错误的代码,然后对其做出一些处理,让我们的代码能够完全执行完,不至于报错后就停止运行了。

利用try catch捕获异常 

看下面的代码

try {
      console.log("try 开始");
      console.log(a.name); //这里会出现错误,进行捕获
      console.log("try 结束");
    } catch (err) {
      console.log("catch 开始");
      console.log(err.message); //错误提示
      console.log("catch 结束");
    } finally { //无论是否发生错误都会执行
      console.log("整个程序结束");
    }

这是运行结果

 从结果我们就能看出来try catch的执行流程了,首先运行try中的代码,只要发生了错误就是捕获错误,运行catch中的代码,并能从err.message中捕获到错误信息,并且整个代码都可以执行完毕,并不是出现停止运行的情况。

 其实在绝大多数情况下我们是不需要捕获异常的,毕竟写好的代码怎么可能无缘无故报错呢,一般都是跟一些业务场景结合才会使用捕获异常

首先是我们提前就能预知某段代码会出现异常,比如网络请求,出现错误的情况,用户在断网的情况下

然后就是我们必须要确定出现异常后该做些什么事情,就比如用户断网了,我们捕获错误后应该提醒用户

 4.手动抛出异常

它的语法是这样的,错误的类型我们可以随便定义

    throw new TypeError('这是一个类型错误')

这是控制台的报错

 什么时候会用到手动抛出错误

1.可以预知某段代码可能会发生错误

2.浏览器不会自动抛出该错误

3.该函数无法处理这个错误

下面是一个例子:

 //这是一个求和的函数
    function sum(a, b) {
      if (typeof a !== 'number' || typeof b !== 'number') {
        throw new TypeError('传入的参数必须是数字')
      }
      return a + b
    }
    let s = sum(1, '2')

这是一个求和的函数,并且我们规定传入的参数必须是整数,但是执行此函数浏览器并不会报错,这时候我们就可以手动的抛出这个错误来提醒开发者

 5.总结

1.对于异常的知识,大概要知道基本的错误类型有哪些,这样在写代码,调试代码时能更快的找出程序的错误

2.要能够根据错误信息迅速的反应过来是什么错误,并能找到错误的代码行

3.要知道捕获异常的语法以及捕获异常的时机

4.会在适当的时机手动抛出错误

希望此文对你了解异常的知识能有所帮助

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OSI 和 TCP/IP 网络分层模型详解(基础)

OSI模型: 即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。 OSI 七层模型 OS…

centos逻辑分区磁盘扩展

最近碰到服务器磁盘空间不足,需要扩展逻辑分区的需求,特地做下小笔记,方便后续自己回忆。下图是磁盘的相关概念示意图: 1、查看磁盘空间 [rootlocalhost ~]# df -h #查看磁盘空间,根分区的大小是18G,已经用…

RISCV -3 RV32I/RV64I基本整型指令集

RISCV -3 RV32I/RV64I基本整型指令集 1 RV32I Base Integer Instruction Set1.1 Programmers’ Model for Base Integer ISA1.2 Base Instruction Formats1.3 Immediate Encoding Variants1.4 Integer Computational Instructions1.4.1 Integer Register-Immediate Instruction…

深入浅出多种开发语言对接淘宝京东1688阿里巴巴等电商平台,获取实时商品详情数据API接口介绍

api接口详解大全?优秀的设计是产品变得卓越的原因设计API意味着提供有效的接口,可以帮助API使用者更好地了解、使用和集成,同时帮助人们有效地维护它每个产品都需要使用手册,API也不例外在API领域,可以将设计视为服务器和客户端之…

iPortal 注册登录模块扩展开发

作者:yx 文章目录 前言一、示例代码简介二、对接 iPortal REST API 接口2.1、登录模块扩展开发2.2、注册模块扩展开发 三、页面内容及样式实现四、配置启用定制页面 前言 针对注册登录模块,iPortal 允许用户通过 iFrame 方式接入自行开发的页面&#xf…

pytorch安装GPU版本 (Cuda12.1)教程: Windows、Mac和Linux系统快速安装指南

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

语言尽头的奇幻旅程:如何求解最后一个单词的长度?

本篇博客会讲解力扣“58. 最后一个单词的长度”的解题思路,这是题目链接。 以示例2为例:s " fly me to the moon " 首先,找到字符串末尾的\0。s一开始指向首字符f,我们从这个位置开始,向后遍历&#xff0c…

基于高斯混合模型聚类的风电场短期功率预测方法(Pythonmatlab代码实现)

目录 💥1 概述 📚2 运行结果 2.1 Python 2.2 Matlab 🎉3 参考文献 🌈4 Matlab代码、数据、文章讲解 💥1 概述 文献来源: 摘要:对任意来流条件下的风电场发电功率进行准确预测,是提高电网对风电…

153、仿真-基于51单片机四相步进电机正反转控制系统设计(程序+Proteus仿真+参考论文+流程图+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、设计功能 二、Proteus仿真图​ 三、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一:ST…

vuejs源码之模版编译原理

之前我们说过虚拟dom,也就是虚拟dom拿到vnode后所做的事情,而模版编译是如何让虚拟dom拿到vnode。 模版编译的目标就是生成渲染函数,而渲染函数的作用是每次执行它,它就会使用当前最新的状态生成一份新的vnode,然后用…

ES6基础知识八:你是怎么理解ES6中Proxy的?使用场景?

一、介绍 定义: 用于定义基本操作的自定义行为 本质: 修改的是程序默认形为,就形同于在编程语言层面上做修改,属于元编程(meta programming) 元编程(Metaprogramming,又译超编程,是指某类计算…

.360勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

引言: 近年来,随着互联网的普及和信息技术的快速发展,网络安全问题日益严峻。其中,勒索病毒成为网络安全领域的一大威胁。本文91数据恢复将重点介绍一种名为“.360勒索病毒”的恶意软件,并探讨被该病毒加密的数据文件…

quartus工具篇——PLL IP核的使用

quartus工具篇——PLL IP核的使用 1、PLL简介 PLL(Phase-Locked Loop,相位锁环)是FPGA中非常重要的时钟管理单元,其主要功能包括: 频率合成 - PLL可以生成比输入时钟频率高的时钟信号。频率分频 - PLL也可以输出分频后的较低频率时钟。减小时钟抖动 - PLL可以过滤输入时钟中…

踩坑 视觉SLAM 十四讲第二版 ch8 编译及运行问题

1.fmt相关 CMakeLists.txt中&#xff1a;在后面加上 fmt target_link_libraries(optical_flow ${OpenCV_LIBS} fmt ) target_link_libraries(direct_method ${OpenCV_LIBS} ${Pangolin_LIBRARIES} fmt )2.不存在用户定义的从 "std::_Bind<void (OpticalFlowTracker::…

架构重构实践心得

一、前言 大多数的技术研发都对重构有所了解&#xff0c;而每个研发又都有自己的理解。从代码重构到架构重构&#xff0c;我参与了携程大型全链路重构项目&#xff0c;积累了一点经验心得&#xff0c;在此抛砖引玉和大家分享。 二、重构的定义 重构是指在不改变外部行为的情…

改进的北方苍鹰算法优化VMD参数,最小包络熵、样本熵、信息熵、排列熵(适应度函数可自行选择,一键修改)包含MATLAB源代码...

今天给大家带来一期由改进的北方苍鹰算法(SCNGO)优化VMD的两个参数。 同样以西储大学数据集为例&#xff0c;选用105.mat中的X105_BA_time.mat数据中1000个数据点。没有数据的看这篇文章。西储大学轴承诊断数据处理&#xff0c;matlab免费代码获取 选取四种适应度函数进行优化&…

信息安全运维经验

1.备份系统 国外主流&#xff1a;veritas NetBackUp&#xff08;NBU&#xff09;、IBM&#xff08;TSM&#xff09; (191条消息) 【大数据-文摘笔记】Veritas NBU简介_weixin_30501857的博客-CSDN博客 虚拟机玩转 Veritas NetBackup&#xff08;NBU&#xff09;之服务端安装…

【云计算小知识】云环境是什么意思?有什么优点?

随着云计算的快速发展&#xff0c;了解云计算相关知识也是运维人员必备的。那你知道云环境是什么意思&#xff1f;有什么优点&#xff1f;云环境安全威胁有哪些&#xff1f;如何保证云环境的运维安全&#xff1f;这里我们就来简单聊聊。 云环境是什么意思&#xff1f; 云环境是…

水环境综合治理监测系统:筑牢城市水生态安全屏障

水是生命之源&#xff0c;是人类赖以生存的基础。然而&#xff0c;随着工业化、城市化的快速发展&#xff0c;水污染问题日益凸显&#xff0c;给居民的环境卫生以及用水安全带来了巨大的威胁。因此&#xff0c;加强水环境综合治理&#xff0c;保护水资源和维护生态平衡&#xf…

微信小程序导入微信地址

获取用户收货地址。调起用户编辑收货地址原生界面&#xff0c;并在编辑完成后返回用户选择的地址。 1&#xff1a;原生微信小程序接口使用API&#xff1a;wx.chooseAddress(OBJECT) wx.chooseAddress({success (res) {console.log(res.userName)console.log(res.postalCode)c…
最新文章