前言

今日话题,了解JavaScript的错误处理机制。

一、ReferenceError

引用一个不存在的变量时发生的错误。将一个值分配给无法分配的对象,比如对函数的运行结果或者函数赋值。

举栗子

  1. try {
  2. console.log(a) // a 未声明的变量
  3. } catch (e) {
  4. if (e instanceof ReferenceError) {
  5. console.log(e.name + ": " + e.message); // ReferenceError: a is not defined
  6. }
  7. }

构建一个ReferenceError

  1. try {
  2. throw new ReferenceError('Hello', 'someFile.js', 10);
  3. } catch (e) {
  4. console.log(e instanceof ReferenceError); // true
  5. console.log(e.message); // "Hello"
  6. console.log(e.name); // "ReferenceError"
  7. console.log(e.fileName); // "someFile.js"
  8. console.log(e.lineNumber); // 10
  9. console.log(e.columnNumber); // 0
  10. console.log(e.stack); // "@Scratchpad/2:2:9\n"
  11. }
  1. 如果未声明变量就使用,就会抛出这个异常哦!

二、TypeError

变量或参数不是预期类型时发生的错误。比如使用new字符串、布尔值等原始类型和调用对象不存在的方法就会抛出这种错误,因为new命令的参数应该是一个构造函数。

举栗子

  1. try {
  2. var a = {}
  3. a.go()
  4. } catch (e) {
  5. if (e instanceof TypeError) {
  6. console.log(e.name + ": " + e.message); // TypeError: a.go is not a function
  7. }
  8. }

三、EvalError

在ES5以下的JavaScript中,当eval()函数没有被正确执行时,会抛出evalError错误。

举栗子

  1. var myEval = eval;
  2. myEval("alert('call eval')");
  1. ES5以上的JavaScript中已经不再抛出该错误,但依然可以通过new关键字来自定义该类型的错误提示。

四、RangeError

数值变量或参数超出其有效范围

举栗子

  1. try {
  2. [].length = -1
  3. } catch (e) {
  4. if (e instanceof RangeError) {
  5. console.log(e.name + ": " + e.message); // RangeError: Invalid array length
  6. }
  7. }

五、SyntaxError

语法错误,比如变量名不规范

举栗子

  1. try {
  2. var 1
  3. } catch (e) {
  4. if (e instanceof SyntaxError) {
  5. console.log(e.name + ": " + e.message); // SyntaxError: Unexpected number
  6. }
  7. }

六、URIError

给 encodeURI()或 decodeURl()传递的参数无效

举栗子

捕获一个URIError

  1. try {
  2. decodeURIComponent('%');
  3. } catch (e) {
  4. console.log(e instanceof URIError); // true
  5. console.log(e.message); // "malformed URI sequence"
  6. console.log(e.name); // "URIError"
  7. console.log(e.fileName); // "Scratchpad/1"
  8. console.log(e.lineNumber); // 2
  9. console.log(e.columnNumber); // 2
  10. console.log(e.stack); // "@Scratchpad/2:2:3\n"
  11. }

创建URIError实例

  1. try {
  2. throw new URIError('Hello', 'someFile.js', 10);
  3. } catch (e) {
  4. console.log(e instanceof URIError); // true
  5. console.log(e.message); // "Hello"
  6. console.log(e.name); // "URIError"
  7. console.log(e.fileName); // "someFile.js"
  8. console.log(e.lineNumber); // 10
  9. console.log(e.columnNumber); // 0
  10. console.log(e.stack); // "@Scratchpad/2:2:9\n"
  11. }

兼容性

你知道JavaScript这六种错误类型吗?的更多相关文章

  1. javascript中常见错误类型

    js中控制台报错主分两大类: 第一类:语法错误,这一类错误在javascript预解析的过程中如果遇到,则会导致整个js文件都无法执行. 另一类:统称为异常,这一类的错误会导致在错误出现的那一行之后的 ...

  2. javascript错误类型

    ECMA-262 定义了下列 7 种错误类型,简单说明如下: Error:普通异常.通常与 throw 语句和 try/catch 语句一起使用. 利用属性 name 可以声明或了 解异常的类型,利用 ...

  3. 玩转JavaScript OOP[0]——基础类型

    前言 long long ago,大家普遍地认为JavaScript就是做一些网页特效的.处理一些事件的.我身边有一些老顽固的.NET程序员仍然停留在这种认知上,他们觉得没有后端开发肯定是构建不了系统 ...

  4. javascript中的错误处理机制

    × 目录 [1]对象 [2]类型 [3]事件[4]throw[5]try[6]常见错误 前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较 ...

  5. javascript类型系统——Number数字类型

    × 目录 [1]定义 [2]整数 [3]浮点数[4]科学记数[5]数值精度[6]数值范围[7]特殊数值[8]转成数值[9]实例方法 前面的话 javascript只有一个数字类型,它在内部被表示为64 ...

  6. JavaScript基础——添加错误处理

    JavaScript编程的一个重要组成部分,是添加错误处理来应对可能会出现的问题.默认情况下,如果因为你的JavaScript中的问题二产生了一个代码异常,那么脚本就会失败并且无法完成加载.这通常不是 ...

  7. javascript 关于Date 时间类型 处理方法

    上一篇博客中和大家分享了关于 字符串转时间类型 这一篇顺便整理下 javascript 中 Date 类型的一些方法 var time = new Date(); var year=time.getY ...

  8. JavaScript判断对象的类型

    JavaScript判断对象的类型 最近阅读了一些关于JavaScript判断对象类型的文章.总结下来,主要有constructor属性.typeof操作符.instanceof操作符和Object. ...

  9. JavaScript 基本类型值-Number类型

    ▓▓▓▓▓▓ 大致介绍 在JavaScript的内部采用IEEE754格式来表示数字,所以不区分整数和浮点数,都是用64位浮点数的形式储存.就是说,在JavaScript内部,就根本没有小数.但是有些 ...

随机推荐

  1. 初学者的linux - 基本知识篇

    1.Linux系统结构 Linux是一套免费使用和自由传播的类Unix操作系统,它是一种倒树结构. “/”就是系统的顶级目录,称作根目录,“/bin,/root,/home,/etc.."这 ...

  2. TCP三次握手抓包理解

    TCP建立连接需要三次握手,分手需要四次握手,平时在网上看到很多次,但是还没有很理解.为什么分手要多一次?可能是刚开始追求女生的时候比较容易,到分手的时候就比较麻烦了吧... 了解某个东西要从它的基础 ...

  3. Python之父新发文,将替换现有解析器

    花下猫语: Guido van Rossum 是 Python 的创造者,虽然他现在放弃了"终身仁慈独裁者"的职位,但却成为了指导委员会的五位成员之一,其一举一动依然备受瞩目.近日 ...

  4. 通过OpenGL理解前端渲染原理(1)

    一.OpenGL OpenGL,是一套绘制3D图形的API,当然它也可以用来绘制2D的物体.OpenGL有一大套可以用来操作模型和图片的函数,通常编写OpenGL库的人是显卡的制造者.我们买的显卡都支 ...

  5. 基于SpringBoot从零构建博客网站 - 新增创建、修改、删除专栏功能

    守望博客是支持创建专栏的功能,即可以将一系列相关的文章归档到专栏中,方便用户管理和查阅文章.这里主要讲解专栏的创建.修改和删除功能,至于专栏还涉及其它的功能,例如关注专栏等后续会穿插着介绍. 1.创建 ...

  6. 阿里云nas使用记录

    公司买了阿里云的nas服务用来共享存储,多个web服务器共同挂载同一个nas服务.挂载过程中出现如下报错 NAS报错: [root@BJ-SBC fs]# mount -t nfs 10.10.8.1 ...

  7. 模拟器无Back、Menu等键

    问题如图所示: 解决方法: 1. 打开Android Virtual Device (AVD) Manager --> 选择模拟器,并点击edit --> 勾选KeyBoard中的选项,并 ...

  8. 派胜OA二次开发笔记(1)重写主界面

    最近从派胜OA 2018 升级到 2019,为了二次开发方便,索性花了两天,反向分析 PaiOA 2019 主界面程序,重写大部分代码,方便对菜单权限进行控制. 主界面/core/index.aspx ...

  9. 微服务世界之Nacos初见

    Nacos 1.概要 Dubbo 服务的注册和发现/rpc通信/负载均衡/限流/熔断/降级 Spring Cloud alibaba 服务注册发现中间件 zookeeper/eureka/consul ...

  10. 夯实Java基础(一)——数组

    1.Java数组介绍 数组(Array):是多个相同类型元素按一定顺序排列的集合. 数组是编程中最常见的一种数据结构,可用于存储多个数据,每个数组元素存放一个数据,通常我们可以通过数组元素的索引来访问 ...