JavaScript错误处理完整指南

大家好,我是 Echa 。
本文将带你了解 JAVAscript 中常见的错误类型,处理同步和异步 JavaScript/Node.js 代码中错误和异常的方式,以及错误处理最佳实践!
1. 错误概述
JavaScript 中的错误是一个对象,在发生错误时会抛出该对象以停止程序 。在 JavaScript 中,可以通过构造函数来创建一个新的通用错误:
const err = new Error("Error");
当然,也可以省略 new 关键字:
const err = Error("Error");
Error 对象有三个属性:
 

  • message:带有错误消息的字符串;
  • name: 错误的类型;
  • stack:函数执行的堆栈跟踪 。
 
例如,创建一个 TypeError 对象,该消息将携带实际的错误字符串,其 name 将是“TypeError”:
const wrongType = TypeError("Expected number");wrongType.message; // 'Expected number'wrongType.name; // 'TypeError'
堆栈跟踪是发生异常或警告等事件时程序所处的方法调用列表:
JavaScript错误处理完整指南

文章插图
 
它首先会打印错误名称和消息,然后是被调用的方法列表 。每个方法调用都说明其源代码的位置和调用它的行 。可以使用此数据来浏览代码库并确定导致错误的代码段 。此方法列表以堆叠的方式排列 。它显示了异常首先被抛出的位置以及它如何通过堆栈方法调用传播 。为异常实施捕获不会让它通过堆栈向上传播并使程序崩溃 。
对于 Error 对象,Firefox 还实现了一些非标准属性:
 
  • columnNumber:错误所在行的列号;
  • filename:发生错误的文件
  • lineNumber:发生错误的行号
 
JavaScript错误处理完整指南

文章插图
 
2. 错误类型
JavaScript 中有一系列预定义的错误类型 。只要使用者没有明确处理应用程序中的错误,它们就会由 JavaScript 运行时自动选择和定义 。
JavaScript中的错误类型包括:
 
  • EvalError
  • InternalError
  • RangeError
  • ReferenceError
  • SyntaxError
  • TypeError
  • URIError
 
这些错误类型都是实际的构造函数,旨在返回一个新的错误对象 。最常见的就是 TypeError 。大多数时候,大部分错误将直接来自 JavaScript 引擎,例如 InternalError 或 SyntaxError 。
JavaScript 提供了 instanceof 运算符可以用于区分异常类型:
try {If (typeof x !== ‘number’) {throw new TypeError(‘x 应是数字’);} else if (x <= 0) {throw new RangeError('x 应大于 0');} else {} catch (err) {if (err instanceof TypeError) {// 处理 TypeError 错误} else if (err instanceof RangeError) {// 处理 RangeError 错误} else {// 处理其他类型错误
下面来了解 JavaScript 中最常见的错误类型,并了解它们发生的时间和原因 。
(1)SyntaxError
SyntaxError 表示语法错误 。这些错误是最容易修复的错误之一,因为它们表明代码语法中存在错误 。由于 JavaScript 是一种解释而非编译的脚本语言,因此当应用程序执行包含错误的脚本时会抛出这些错误 。在编译语言的情况下,此类错误在编译期间被识别 。因此,在修复这些问题之前,不会创建应用程序二进制文件 。
SyntaxError 发生的一些常见原因是:
 
  • 缺少引号
  • 缺少右括号
  • 大括号或其他字符对齐不当
 
(2)TypeError
TypeError 是 JavaScript 应用程序中最常见的错误之一,当某些值不是特定的预期类型时,就会产生此错误 。
JavaScript错误处理完整指南

文章插图
 
TypeError 发生的一些常见原因是: