JavaScript:错误处理

news2024/12/28 18:28:34

一个优秀的产品,需要有一个良好的错误处理策略可以让用户知道到底发生什么。不至于让用户自己不知道发生了什么,然后再重试或者是不至于然用户感到特别厌烦,然后直接离开。

try/catch语句

try/catch语句,在JavaScript中作为处理异常的一种方式,基本语句如下:

try{
   // 可能出错的代码
} catch(error){
   // 出错的时候做什么
}

如果try块中有代码发生错误,就会立即退出执行,跳到catch块中,这时候catch模块接受到一个对象,该对象包含了发生错误的相关信息,比如:

try{
	window.someNonexistenFunction();
} catch (error){
	console.log(error.message);
}

这个message属性是唯一一个在IE、Firefox、Safari、Chrome和Opera中都有的属性,尽管每个浏览器添加了其他属性。IE添加了description属性(其值始终等于message)和number属性(它包含内部错误号)。Firefox添加了fileName、lineNumber和stack(包含栈跟踪信息)属性。Safari添加了line(行号)、sourceId(内部错误号)和sourceURL属性。同样,为保证跨浏览器兼容,最好只依赖message属性。

finally子句

在try/catch语句中,可选的finally语句始终运行,意思就是try模块中代码执行结束后,就执行finally模块中的代码。如果出错并执行catch中的代码,finally模块中代码依旧在运行。try或者catch不能阻止finally块的执行,包括return。比如:

function test(){
	try{
		return 2;
	}catch(err){
		return 1;
	}finally{
		return 0;
	}
}
console.log(test()); // 0

在这段代码中,如果去掉finally模块,则返回2;如果写上finally语句,就不管什么情况都会返回2,那么catch就是可选项了。

总结:只要代码中包含了finally语句,那么try或者catch的return就会被忽略。

错误类型

代码在执行过程中,会发生各种各样的类型错误,每种类型都会对应一个错误发生时抛出的错误对象。

有8中错误类型:

  1. Error,基类型,其他类错误类型都是继承基类型。所以所有的错误类型都共享相同的属性;
  2. internalError,在底层JavaScript引擎抛出异常的时候,由浏览器抛出的错误类型。例如递归过多导致栈溢出;
  3. EvalError,通常在eval函数发生异常的时候抛出。基本上,只要不把eval()当成函数调用就会报告该错误;
  4. RangeError,在数值越界时抛出,比如定义数组时,设置了不支持的长度,就会这个类型的错误;
  5. ReferenceError,在找不到对象的时候发生,这种错误经常是由访问不存在的变量而导致的;
  6. SyntaxError,SyntaxError经常在给eval()传入的字符串包含JavaScript语法错误时发生,比如:eval("a ++ b"); // 抛出SyntaxError
  7. TypeError,JavaScript中很常见,主要发生在变量不是预期类型,或者访问不存在的方法时
let o = new 1100 ; // TypeError
console.log('name' in true) ; // TypeError
Function.prototype.toString.call("name"); // TypeError

在这里插入图片描述

  1. URIError,会在使用encodeURI()或decodeURI()但传入了格式错误的URI时发生

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

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

相关文章

51 java.lang.Class/java.lang.ClassLoader/InstanceKlass/ClassloaderData 的卸载

前言 之前 碰到了一个 flink 基于 ChildFirstClassLoader 来进行任务隔离 导致的内存泄漏的问题 然后 使用 demo 复现了一下 问题 之后 想探索一下 java language 中 类型的卸载相关 并且会 拓展一些其他的知识 以下测试用例基于 jdk8, 部分截图基于 jdk9 测试用例 T…

0行代码拿210万年薪,ChatGPT催生新型「程序员」岗:工作纯靠和AI聊天

梦晨 发自 凹非寺量子位 | 公众号 QbitAI靠玩ChatGPT,还能找到新工作?没错,Riley Goodside(后面叫他好面哥)4月份开始在网上发布玩GPT-3的心得。最近ChatGPT一波爆火,他不光粉丝涨了一万多,还收…

『 云原生·Docker』Docker中部署Nginx

系列文章目录 本系列主要分为以下六大部分,正在更新中,尽请期待! 『 云原生生之门』 『 云原生前置知识』 『 云原生Docker』 『 云原生Kubernetes』 『 云原生KubeSphere』 『 云原生DevOps』 🚩点击关注本专栏 提示:已经更新的或正在更新的…

自动驾驶之MultiPath++论文阅读笔记

预测道路参与者的future behavior. 摘要 将输入由dense image-based encoding改为a sparse encoding of heterogeneous scene elements. 即用polylines(折现)来描述road features和原始的agent state information(例如位置、速度和加速度)。 主要方法是对这些元素进行a conte…

【POJ No. 2778】DNA 序列 DNA Sequence

【POJ No. 2778】DNA 序列 DNA Sequence 北大OJ 题目地址 【题意】 DNA序列是一个只包含A、C、T和G的序列。分析DNA序列片段非常有用,若动物的DNA序列包含片段ATC,则意味着该动物可能患有遗传病。 给定m 个遗传病片段,求有多少种长度为n 的…

自动驾驶两大路线对决,渐进式玩家为何更容易得人心?

HiEV消息(文/长海)对自动驾驶赛道而言,2022年的冬天格外冷冽。寒潮袭来,从各家的应变方式看,不同路径的玩家呈现“冰火两重天”,进化的趋势也越来越清晰。 以Waymo为代表、持续研发L4级无人驾驶的跨越式路线…

web课程设计网页规划与设计 :DW旅游主题网页设计——凤阳智慧旅游官方-地方旅游网站模板html源码HTML+CSS+JavaScript

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

ONES X 华西证券|以需求全流程管控,洞见金融数据价值

近日,ONES 签约全国一流证券金融服务商——华西证券,助推华西证券构建需求全流程管控体系,保障需求任务的上下游衔接与顺畅流转,做到系统内所有数据透明化、线上化、统一化,提高团队协同效率,打破「部门墙」…

所谓“生活的艺术“, 就是悠闲二字

关于作者 作为陈独秀、胡适、鲁迅的同时代人,林语堂是"五四"新文化运动的参与者,中国现 代著名作家、学者、翻译家、语言学家,新道家代表人物。他清晰地看到了关于中国 传统文化观点的两种极端倾向,一种是把 中国传统文…

R语言VAR模型的不同类型的脉冲响应分析

目录 模型与数据 估算值 预测误差脉冲响应 识别问题 正交脉冲响应 结构脉冲反应 广义脉冲响应 参考文献 最近我们被客户要求撰写关于脉冲响应分析的研究报告,包括一些图形和统计输出。脉冲响应分析是采用向量自回归模型的计量经济学分析中的重要一步。它们的…

火爆出圈的ChatGPT,你也来体验一下吧!

最近网络上流行了一个叫ChatGPT的东西,他到底是什么东西? ChatGPT是人工智能实验室OpenAI发布的一款对话式聊天机器人。他可以解答很多刁钻有难度的问题,一经发布就火遍科技圈。12月4日,马斯克在咨询该聊天机器人关于推特经营的建…

构建高性能内存队列:Disruptor 永远滴神~

我们清楚使用锁的性能比较低,尽量使用无锁设计。接下来就我们来认识下Disruptor。 Disruptor简单使用 先简单介绍下: Disruptor它是一个开源的并发框架,并获得2011 Duke’s程序框架创新奖【Oracle】,能够在无锁的情况下实现网络…

单机存储系统可靠性及相关技术介绍

一、存储系统可靠性的影响因素单机存储系统包括存储硬件和存储软件。存储硬件又包含存储介质、存储控制器、设备固件;存储软件栈层次则更为复杂,以Linux为例包括:存储设备驱动层、 块设备层(Block Layer)、可选的虚拟块设备层(Device Mapper)…

新手使用wvp-pro和zlm的菜鸟说明(手把手教)

对于wvp-pro的使用,很多大佬都是白嫖菜鸟党,很多都第一次使用wvp,甚至第一次接触国标,连国标最基本流程都不清楚。所以写此文档以供各位菜鸟大佬点评指正 看此文档前提: 第一:先看三遍zlm和wvp的wiki&…

【光照感知子场:差分感知融合模块与中间融合策略相结合】

PIAFusion: A progressive infrared and visible image fusion network based on illumination aware 本文提出了一种基于光照感知的渐进式图像融合网络PIAFusion,自适应地保持显著目标的亮度分布和背景的纹理信息。具体而言,我们设计了一个光照感知子网…

【Java基础篇】基础知识易错集锦(一)

在学习的路上,我们只记得学习新的知识,却忽略了一切新知识都是在旧知识的基础上;努力奔跑的过程中,也要记得常回头看看; 题目展示: 解析: abstract是抽象的意思,在java中&#xff0…

【Vue 快速入门】使用vue脚手架创建一个项目

文章目录一、环境检查1.安装node环境2.脚手架配置3.不同版本vue介绍二、创建项目三、脚手架配置解说1.配置解说2.我的第一个vue程序一、环境检查 1.安装node环境 Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境…

Flutter - AlignmentGeometry :Alignment 和 FractionalOffset

AlignmentGeometry 是一个抽象类,它有两个常用的子类:Alignment和 FractionalOffset Alignment Alignment继承自AlignmentGeometry,表示矩形内的一个点,他有两个属性x、y,分别表示在水平和垂直方向的偏移 上图中 Flu…

阳光保险港交所上市:年营收1200亿 市值超600亿港元

雷递网 雷建平 12月9日阳光保险集团股份有限公司 (简称:“阳光保险”,06963)今日在港交所上市,发行价为每股5.83港元,募资净额为64.195亿港元。若行使超额配股权,阳光保险可额外再募资9.81亿港元。阳光保险发行价为5.8…

软件测试 -- 进阶 7 软件测试环境构建 与 测试数据准备

工欲善其事,必先利其器。-- 《论语卫灵公》 释译:工匠想要工作做好,一定要先让工具锋利。比喻要做好一件事,准备工作非常重要。 1. 为什么要构建测试环境、准备测试数据 提前准备测试所需资源保证测试有效执行保证测试用序执…