JavaScript错误处理机制全面分析讲解

目录
  • 1. Error 实例
  • 2. 原生错误类型
    • 2.1 ReferenceError
    • 2.2 SyntaxError
    • 2.3 TypeError
    • 2.4 RangeError
    • 2.5 URIError
    • 2.6 evalError
  • 3. 自定义错误类型
  • 4. throw
  • 5. try…catch
  • 6. finally
  • 总结

1. Error 实例

JavaScript在运行错误时会抛出一个错误,JS提供了Error构造函数,所有抛出的错误都是这个构造函数的实例

const err = new Error('代码出错了');
err.message; // 代码出错了

上面的Error接受了一个message参数,Error构造函数还有另外两个参数name和stack

  • message 错误提示信息
  • name 错误名称
  • stack 错误的调用栈
const err = new Error('代码出错了');
err.name; // 'Error'
err.stack; //'Error: 出错了\n    at <anonymous>:1:5'

2. 原生错误类型

除了基础的Error错误类型,JavaScript还内置了六种原始的错误类型

  • ReferenceError 引用错误
  • SyntaxError 语法错误
  • TypeError 类型错误
  • RangeError 范围错误
  • URIError URI方法执行错误
  • EvalError eval函数执行错误

2.1 ReferenceError

使用一个不存在的变量时会抛出Reference Error

test;
//Uncaught ReferenceError: assd is not defined at <anonymous>:1:1

另一种触发的场景是将一个值分配给无法分配的对象,比如对函数的运行结果赋值

console.log() = 1
// Uncaught ReferenceError: Invalid left-hand side in assignment

2.2 SyntaxError

当JS解析代码发生错误时会抛出SyntaxError错误

const 1a;
Uncaught SyntaxError: Invalid or unexpected token
5 = 6;
Uncaught SyntaxError: Invalid left-hand side in assignment

2.3 TypeError

放变量或者参数不是预期类型的时候会出现TypeError错误,比如对非函数类型使用new,或者对非函数类型使用圆括号运算

let a;
a();
//VM7449:1 Uncaught TypeError: b is not a function at <anonymous>:1:1

2.4 RangeError

当数值超出预期范围的时候会出现RangeError,主要情况有几种,一是数组长度为负数,二是Number对象的方法接收的参数超出范围,以及函数堆栈超出最大值

const arr = new Array(-5);
//VM7833:1 Uncaught RangeError: Invalid array lengthat <anonymous>:1:13
function foo(){
  foo();
};
foo();
//Uncaught RangeError: Maximum call stack size exceeded

2.5 URIError

URI方法执行错误时会出现URIError错误,例如URIError接收非预期的参数

decodeURI('%');
//VM8142:1 Uncaught URIError: URI malformedat decodeURI (<anonymous>)at <anonymous>:1:1

2.6 evalError

eval函数执行错误时会抛出EvalError,该错误类型以及不再被使用了,知识为了保证与以前代码兼容才保留

3. 自定义错误类型

除了JS提供的7种原生的错误类型,还可以通过继承Error自定义错误类型

funtion CustomError(message){
  this.message = message;
  this.name = 'CustomError';
};
CustomError.prototype = new Error();
CustomError.prototype.construct = CustomError;
throw new CustomError('这是一个自定义错误');
//CustomError {message: '这是一个自定义错误', name: 'CustomError'};

4. throw

在使用thorw抛出错误的时候,代码执行会在在throw处终止,thorw以下的代码将不再执行

throw new Error('出错了');
console.log('该行代码不会执行');

实际上throw不仅能抛出Error实例,还能抛出任意类型的数据,对javaScript引擎来说只要遇上throw代码就停止执行

thorw '23';
console.log('该行代码不会执行');
throw true;
throw {};
throw [];
throw 20;

throw方法有两种写法,可以加上圆括号和省略圆括号

throw new Error('出错了');
throw (new Error('出错了'));

5. try…catch

使用throw的时候会阻碍后续代码的执行,使用费try…catch包裹throw语句就不会影响后续代码的执行了,catch用于错误的捕获,代码发生错误的时候执行。

    try {
      throw new Error('出错了');
    } catch (e) {
      console.error(e)
    };
    console.log('后续代码继续执行'); //后续代码继续执行

6. finally

不管是否发生错误finally语句都会执行

    try {
      throw new Error('出错了');
    } catch (e) {
      console.log('catch')
    }finally{
       console.log('finally');
    }

总结

JS内置了六种内错误类型: SyntaxError、ReferenceError、TypeError、RangeError、URIError、EvalError

到此这篇关于JavaScript错误处理机制全面分析讲解的文章就介绍到这了,更多相关JS错误处理机制内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 简介JavaScript错误处理机制

    1. try-catch语句 ECMA-262第3版引入了try-catch语句,作为JavaScript中处理异常的一种标准方式. 语法: try{ // 可能会导致错误的代码 }catch (error){ // 在错误发生时怎么处理 } 也就是说,我们应该把所有可能会抛出错误的代码都放在try语句块中,而把那些用于错误处理代码放在catch块中. try-catch语句的逻辑是:如果try块中的任何代码发生了错误,就会立即退出代码执行过程,然后接着执行catch块.此时,catch块会接收

  • 深入分析javascript中的错误处理机制

    前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较差的用户体验.由于任何javascript错误都可能导致网页无法使用,因此作为开发人员,必须要知道何时可能出错,为什么会出错,以及会出什么错.本文将详细介绍javascript中的错误处理机制 error对象 error对象是包含错误信息的对象,是javascript的原生对象.当代码解析或运行时发生错误,javascript引擎就会自动产生并抛出一个error对象的实例,然后整个程序

  • 全面了解javascript中的错误处理机制

    前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较差的用户体验.由于任何javascript错误都可能导致网页无法使用,因此作为开发人员,必须要知道何时可能出错,为什么会出错,以及会出什么错.本文将详细介绍javascript中的错误处理机制 error对象 error对象是包含错误信息的对象,是javascript的原生对象.当代码解析或运行时发生错误,javascript引擎就会自动产生并抛出一个error对象的实例,然后整个程序

  • JavaScript错误处理机制全面分析讲解

    目录 1. Error 实例 2. 原生错误类型 2.1 ReferenceError 2.2 SyntaxError 2.3 TypeError 2.4 RangeError 2.5 URIError 2.6 evalError 3. 自定义错误类型 4. throw 5. try…catch 6. finally 总结 1. Error 实例 JavaScript在运行错误时会抛出一个错误,JS提供了Error构造函数,所有抛出的错误都是这个构造函数的实例 const err = new E

  • JavaScript自动内存管理与垃圾回收策略详细分析讲解

    目录 自动内存管理 垃圾回收策略 标记清理策略 引用计数策略 内存管理技巧 解除引用 const和let变量声明 自动内存管理 JavaScript编程语言通过自动内存管理实现内存分配和闲置资源回收. 简单来讲就是:只要确定某个变量X不会再被使用了,就将变量X占用的内存进行释放.这种判断是周期性执行的,即:垃圾回收程序隔一定时间就会自动执行一次,以释放某些不必要的内存开支. JavaScript垃圾回收过程中的难点在于:如何正确判定一块内存是否还有用? 垃圾回收策略 在C/C++程序中,我们记忆

  • javascript类继承机制的原理分析

    目前 javascript的实现继承方式并不是通过"extend"关键字来实现的,而是通过 constructor function和prototype属性来实现继承.首先我们创建一个animal 类 js 代码 复制代码 代码如下: var animal = function (){ //这就是constructor function 了 this .name = 'pipi'; this .age = 10; this .height = 0; } //建立一个动物的实例 var

  • javascript中的try catch异常捕获机制用法分析

    本文实例讲述了javascript中的try catch异常捕获机制用法.分享给大家供大家参考,具体如下: 1.跟Java一样,JavaScript也具有try catch块,进行异常捕获的机制. (1)典型的try catch语句 try{ } catch{ } finally{ } 跟java中一样,JS中最为典型的try catch语句也同样分为了三个部分,try用于捕获异常,catch用于处理异常,而finally用于关闭资源等后续操作. 举例: try{ throw "error&qu

  • JavaScript运行机制实例分析

    本文实例讲述了JavaScript运行机制.分享给大家供大家参考,具体如下: 第一次写博客 目前研一第二学期,大二开始入门前端,然而长久以来都是对于框架的简单调用,并未对其进行深入研究,因此,这个博客是作为自我督促的开始.这篇博客的内容源于前段时间写一个微信小程序前端,发现页面的渲染顺序总与自己的预想相违背,因此近期看了一些关于JavaScript运行机制的博客及文档,有了一些基本的框架,接下来就来详细看一下我所了解到的内容. JavaScript执行顺序 首先,JavaScript是按照顺序,

  • JavaScript基础入门之错误捕获机制

    目录 前言 Error 对象 throw try-catch-finally finally 的规则 Try / Catch 性能 window.onerror Promise 中的异常 Promise 中抛出异常 Promise中捕捉异常 Vue 的异常捕获 总结 前言 Javascript 引擎是单线程的,因此一旦遇到异常,Javascript 引擎通常会停止执行,阻塞后续代码并抛出一个异常信息,因此对于可预见的异常,我们应该捕捉并正确展示给用户或开发者. Error 对象 当运行时错误产生

  • Spring Boot示例分析讲解自动化装配机制核心注解

    目录 1. 自动化装配介绍 2. Spring Boot 自动化配置UML图解 3. Spring Boot 自动化配置核心注解分析 3.1 @Inherited 3.2 @SpringBootConfiguration 3.3 @EnableAutoConfiguration 3.4 @ComponentScan 3.5 @ConfigurationPropertiesScan 3.6 @AutoConfigurationImportSelector 3.7 @AutoConfiguratio

随机推荐