JavaScript中的Error错误对象与自定义错误类型
Error
Error是JavaScript语言中的一个标准的内置对象,专门用于处理JS开发中的运行时错误。
当我们的JS代码在运行过程中发生错误的话,就会抛出Error对象,整个程序将会中断在错误发生的代码处,不再继续执行,这也是错误类型必须重视的原因:它会导致页面无法显示或者功能失效。
Error是JavaScript中最原始的错误对象,作为各种异常的基础对象,还有多个衍生的具体的错误类型,这些错误对象类型在nodejs中也可应用。
Error作为内置对象,它本身数据类型是 function,但被引用时它的数据类型是 object,和 Object、Array 类似,使用 typeof 进行判断如下:
typeof Error // 'function'
typeof Error() // 'object'
typeof new Error() // 'object'
关于typeof的详细知识,可参考本博前文一文搞懂js中的typeof用法
Error语法
下面介绍下Error对象基本的语法知识。
Error对象既可以当作构造函数使用,也可以当作方法,一般有两个可选参数:
new Error(message, options)
Error(message, options)
可选参数说明如下:
- message:错误信息描述
- options:属性对象
- cause:指定错误的具体原因
Error属性和方法
Error实例必然包含 message 属性,除此外一般还提供 name 和 stack 属性,而 cause 属性则根据定义来确定。
- message:错误信息描述
- name:错误的类型名字
- stack:错误的堆栈轨迹,用于堆栈追踪
- cause:当前错误被抛出的具体原因
下面通过一个示例,看下具体的属性信息:
const err = new Error('发生错误!', { cause: '333' })
console.log(err)
// Error: 发生错误!
// at <anonymous>:1:13
console.log(err.message)
// '发生错误!'
console.log(err.cause)
// '333'
console.log(err.stack)
// Error: 发生错误!
// at <anonymous>:1:13
如上代码,定义了一个错误对象,并赋予两个参数,在控制台输出,可以看到该错误对象具体的属性信息。
需要注意的是,只有定义了cause属性的Error实例,才有该属性,否则cause属性不存在,如下所示:
const err2 = new Error('发生错误!')
console.log(err2.cause)
// undefined
err2.cause的输出为undefined,因为构造函数并没有定义该属性。
Error对象没有自己特有的实例方法,只有继承自Object对象的,这里略过。
六种常见错误类型
Error对象衍生有六种常见的错误类型,属于Error的派生类,属性和方法也都继承自Error,下面一一介绍下这六种类型。
SyntaxError
SyntaxError 语法错误,表示JS代码发生的语法上的错误,包括各种不符合语法规范、书写错漏等情况。
如下变量名错误:
const 11 = 8
// Uncaught SyntaxError: Unexpected number
错误的代码语法:
Error(+)
// Uncaught SyntaxError: Unexpected token ')'
SyntaxError语法错误无法被捕获,因为语法错误不会被执行,直接抛出错误,所幸的是,现在的IDE工具和各种插件,已可规避大部分的语法错误。
TypeError
TypeError 类型错误,当代码中的变量参数等类型不对时,就会发生该类型错误。
比如,把属性当方法使用:
window.location()
// Uncaught TypeError: window.location is not a function
// at <anonymous>:1:8
错误的构造函数使用:
new null()
// Uncaught TypeError: null is not a constructor
// at <anonymous>:1:1
ReferenceError
ReferenceError 引用错误,当引用一个并不存在的变量时会发生的错误。
如直接在浏览器控制打印:
a
// Uncaught ReferenceError: a is not defined
// at <anonymous>:1:1
cons.log('')
// Uncaught ReferenceError: cons is not defined
// at <anonymous>:1:1
错误的值分配,给 null 赋值:
null = 1
// Uncaught SyntaxError: Invalid left-hand side in assignment
RangeError
RangeError 取值范围错误,当给某个对象指定一个不在取值范围内的特定值时发生的错误。
如给Array对象传入不合法的长度参数
Array(-1)
Array(Infinity)
// Uncaught RangeError: Invalid array length
// at <anonymous>:1:1
数字类型方法的使用:
5..toFixed(200)
// Uncaught RangeError: toFixed() digits argument must be between 0 and 100
// at Number.toFixed (<anonymous>)
// at <anonymous>:1:4
toFixed() 参数取值范围在0到100之间,超过则会报错。
URIError
URIError 当使用URI相关方法处理数据时,当这些方法的参数不正确时导致的一些错误。
主要常见于URI的解码等方法decodeURI()、decodeURIComponent()等。
decodeURI('%')
decodeURIComponent('%')
// Uncaught URIError: URI malformed
// at decodeURIComponent (<anonymous>)
// at <anonymous>:1:1
EvalError
EvalError 当在使用eval函数时,发生的错误。eval不被推荐使用,该错误类型一般很少见,处于半废弃状态,为了兼容考虑才存在。
自定义错误类型
除了JavaScript自带的常见错误类型以外,我们还可以自定义特殊的错误类型。
处理起来也很简单,使用继承Error对象的方式即可。
class CharError extends Error {
constructor(message = '字符错误') {
super(message)
this.name = 'CharError'
}
}
以上代码使用es6的类继承方式,自定义一个错误类型继承Error对象,后续就可以使用新的 CharError 类型。
const ce = new CharError()
console.log(ce)
// CharError: 字符错误
// at error.html:26:16
如上,与JavaScript内置错误类型使用方式一致。
JavaScript中的Error错误对象与自定义错误类型的更多相关文章
- (转载)JavaScript中的Window窗口对象
(转载)http://www.ijavascript.cn/jiaocheng/javascript-window-65.html 例子: <html> <head> < ...
- javascript中遇到的字符串对象处理
在javascript中对参数处理: 1 <script> 2 function getParam() 3 { 4 urlInfo=window.location.href; //获取当前 ...
- javascript中的内置对象
2015.12.1 javascript中的内置对象 复习: 1.js中的内置函数 alert prompt write parseInt parseFloat eval isNaN document ...
- (转)解决fasterxml中string字符串转对象json格式错误问题(无引号 单引号问题)
原文地址:解决fasterxml中string字符串转对象json格式错误问题 com.fasterxml.jackson.databind.ObjectMapper mapper = new com ...
- javaScript中Math内置对象基本方法入门
概念 Math 是javaScript的内置对象,包含了部分数学常数属性和数学函数方法. Math 不是一个函数对象,用户Number类型进行使用,不支持BigInt. Math 的所有属性与方法都是 ...
- javascript中的Error对象
在javascript中一旦代码解析或运行时发生错误,javascript引擎就会自动产生并抛出一个Error对象的实例,然后整个程序就中断在发生错误的地方. Error对象的实例有三个基本的属性: ...
- javascript中的内置对象总结
内置对象 标准内置对象 Object Object.create Object.prototype.toString Object.prototype.hasOwnProperty Boolean S ...
- (转载)JavaScript中的原型和对象机制
(转载)http://www.cnblogs.com/FlyingCat/archive/2009/09/21/1570656.html 1 对象相关的一些语言特性 1.1 一切皆为对象JavaScr ...
- JavaScript中并非一切皆对象
对象是js中的基础以及核心,在js中有六种主要类型:string number boolean null undefined object 除了oject类型以为其他五种本身并非对象,null本身 ...
- 了解 JavaScript 中的内置对象
所有编程语言都具有内部(或内置的)对象来创建 语言的基本功能.内部对象是 您编写自定义代码所用语言的基础, 该代码基于您的想象实现自定义功能.JavaScript 有许多 将其定义为语言的内部对象.本 ...
随机推荐
- CentOS7下的lvm(逻辑卷)在线扩容
扩展前该lvm分区为14GB 关闭系统,给sdb硬盘扩展6GB,然后重新进入CentOS.(或者是原有磁盘还有剩余未使用的空间) 对sdb进行分区: [root@converter ~]# fdisk ...
- 13. Fluentd输出插件:in_forward用法详解
in_forward插件通常用于从其他节点接收日志事件,这些节点包括其他Fluentd实例.fluent-cat命令行或者Fluentd客户端程序.这是目前效率最高的日志事件接收方法. in_forw ...
- SECS半导体设备通讯-2 HSMS通信标准
一 HSMS通信标准概述 HSMS定义了使用 TCP/IP 作为物理传输媒质时的通信接口. HSMS使用TCP/IP流支持,提供了可靠的双向同步传输,可以用来作为SECS-I通信以及其他更高级的通信环 ...
- 小程序uni-app发起网络异步请求
// uni.request({ // url: 'api/boxs/search', // // 使用监听函数防止this指向改变 // success: res => { // // 判断是 ...
- 没有使用IaC的DevOps系统都是耍流氓
作为现代软件工程的基础实践,基础设施即代码(Infrastructure as Code, IaC)是云原生.容器.微服务以及DevOps背后的底层逻辑.应该说,以上所有这些技术或者实践都是以基础设施 ...
- vivo互联网机器学习平台的建设与实践
vivo 互联网产品团队 - Wang xiao 随着广告和内容等推荐场景的扩展,算法模型也在不断演进迭代中.业务的不断增长,模型的训练.产出迫切需要进行平台化管理.vivo互联网机器学习平台主要业务 ...
- 驱动开发:内核测试模式过DSE签名
微软在x64系统中推出了DSE保护机制,DSE全称(Driver Signature Enforcement),该保护机制的核心就是任何驱动程序或者是第三方驱动如果想要在正常模式下被加载则必须要经过微 ...
- AT24C02
AT24C02是一款拥有256bytes(32Page)的EEPROM. 一 :特点(部分) 1:双线接口: 2:双向数据传输协议: 3:400KHz波特率: 4:硬件写保护: 5:最大5ms写入同步 ...
- 说说 Redis pipeline
更多技术文章,请关注我的个人博客 www.immaxfang.com 和小公众号 Max的学习札记. Redis 客户端和服务端之间是采用 TCP 协议进行通信的,是基于 Request/Respon ...
- NLP之基于TextCNN的文本情感分类
TextCNN @ 目录 TextCNN 1.理论 1.1 基础概念 最大汇聚(池化)层: 1.2 textCNN模型结构 2.实验 2.1 实验步骤 2.2 算法模型 1.理论 1.1 基础概念 在 ...