错误处理机制

在刚学一段时间js之后,自己在用js写东西时,就遇到了许多错误信息提示,之前也没怎么关注,但是真正了解之后,发现js的抛出错误是具有一定规则的。

错误对象:JavaScript解析或运行时,一旦发生错误,引擎会抛出一个错误对象,JavaScript原生提供error构造函数,所有抛出的错误都是这个构造函数的实例。

var err = new Error("出错了");
err.message 		//"出错了"

上面调用Error构造函数,生成一个实例对象err。Error构造函数接受一个参数,表示错误提示,可以从实例的message属性读到这个参数。抛出Error实例对象以后,整个程序就中断在发生错误的地方,不再向下执行。

JavaScript语言标准中提到,Error实例对象必须要有message属性,表示出错时的提示信息,没有提到其他属性。大多数JavaScript引擎,对Error实例还提供name和stack属性,分别表示错误的名称和错误的堆栈,但是他们是非标准的,不是每种实现都有。

  • message: 错误提示信息
  • name: 错误名称(非标准属性)
  • stack: 错误的堆栈(非标准属性)

使用mesage和name属性可以对发生了什么错误有一个大致的了解

Error实例对象是最一般的错误类型,在它的基础上,JavaScript还提供了其他六种错误对象。也就是说,存在Error的六个派生对象。

  • SyntaxError对象:SyntaxError对象是解析代码时发生的语法错误,且是在语法解析时就可以发现的错误

    主要体现在代码的最基本最简单的部分,比如缺少括号或者多了括号、变量名不规范、需要逗号的地方没有加逗号等

  • ReferenceError对象:ReferenceError对象是引用一个不存在的变量时或者将一个值分配给无法分配的对象时(等号左边不是一个变量)(比如对函数的运行结果进行赋值)发生的错误
  • RangeError对象:RangeError对象是一个值超出有效范围时发生的错误。

    主要有几种情况:

    1. 数组长度为负数
    2. Number对象的方法参数超出范围
    3. 函数堆栈超过最大值

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

    比如,对字符串、布尔值、数值等原始类型的值使用new命令,就会抛出这种错误,因为new命令的参数应该是一个构造函数。

var obj = {};
obj.unkonwMethod();
//Uncaught TypeError : obj.unkonwMethod is not a function

这种情况是调用对象不存在的方法,也会抛出TypeError错误

  • URIError对象:URIError对象是URI相关函数的参数不正确时抛出的错误,主要涉及encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape()、unescape()这六个函数
  • EvalError对象:eval函数没有正确执行时,会抛出EvalError错误。但是该错误已经不再使用了,知识为了保证与以前的代码兼容,才继续保留
  • 总结

    以上六种派生错误,连同原始的Error对象,都是构造函数。开发者们可以使用它们手动生成错误对象的实例。这些构造函数都接受一个参数,代表错误提示信息(message)

    var err1 = new Error('err1');
    var err2 = new RangeError('err2');
    var err3 = new TypeError('err3');
    var err4 = new SyntaxError('err4');
    var err5 = new URIError('err5');
    console.log(err1.name + ':' + err1.message);
    console.log(err2.name + ':' + err2.message);
    console.log(err3.name + ':' + err3.message);
    console.log(err4.name + ':' + err4.message);
    console.log(err5.name + ':' + err5.message);
    

    在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

summer·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值