Skip to content

js 内置错误类型 #53

@nmsn

Description

@nmsn

常见错误类型

ReferenceError 引用错误

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RangeError

ReferenceError (引用错误)对象代表当一个不存在(或尚未初始化)的变量被引用时发生的错误

console.log(a); // a 未定义

TypeError 类型错误

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/TypeError

TypeError(类型错误)对象通常(但并不只是)用来表示值的类型非预期类型时发生的错误

TypeError 在 JavaScript 中很常见,主要发生变量在运行时的访问不是预期类型,或者访问不存在的方法时,尤其是在使用类型特定的操作而变量类型不对时

以下情况会抛出 TypeError

  • 传递给运算符的操作或传递给函数的参数与预期的类型不兼容
  • 尝试修改无法更改的值
  • 尝试以不适当的方法使用一个值

使用 ts 能减少大量问题

var a = 100;
a();

SyntaxError 语法错误

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError

对象代表尝试解析语法上不合法的代码的错误

当 Javascript 语言解析代码时,JavaScript 引擎发现了不符合语法规范的 tokens 或 token 顺序时抛出SyntaxError

var aaa = function() {
  var p 1 = 9
}
aaa()

不常见的错误类型

RangeError 越界错误

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RangeError

会在数值越界时抛出。例如,定义数组时如果设置了不支持的长度 -1,又或者没有给递归设置停止条件时触发。

可能出现的情况

  • 将不允许的字符串传递给 String.prototype.normalize()
  • 使用 Array 构造函数创建一个具有不合法的长度的字符串
  • 传递错误值到数值计算方法

在 js 中发生的不多

var arr = new Array(-1)

URIError

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/URIError

URIError 只会在使用 encodeURL()或 decodeURL()时,传入了格式错误的 URL 时发生,但非常罕见,因为上面两个函数非常稳健

EvalError

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/EvalError

会在使用 eval 函数发生异常时抛出

EvalError 不在当前 ECMAScript 规范中使用, 因此不会被运行时抛出. 但是对象本身仍然与规范的早期版本向后兼容

InternalError

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/InternalError

表示出现在 JavaScript 引擎内部的错误。

例如,递归过多导致了栈溢出.这类型并不是代码中通常要处理的错误,如果真的发生了这种错误,很可能代码哪里搞错了或者有危险.

但事实证明递归过多导致栈溢出报的是 RangeError

AggregateError

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/AggregateError
实验中的功能

一个 AggregateError 当需要由操作报告多个错误被抛出

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions