导航
×
   ❮   
HTML CSS JavaScript PHP Go ECMS

JavaScript 教程

JS 简介 JS 如何使用 JS 输出 JS 语法 JS 语句 JS 注释 JS 变量 JS 运算符 JS 条件语句 JS 循环 JS 字符串 JS 数字 JS 函数 JS 对象 JS 日期 JS 数组 JS 类型化数组 JS 集合 JS Map 映射 JS Math JS 正则表达式 JS 数据类型 JS 错误 JS 事件 JS 编程 JS 关键字参考 JS 保留关键字参考 JS 运算符参考 JS 运算符优先级 JS UTF-8 字符 JS UTF-8 符号 JS UTF-8 表情符号 JS 版本

JavaScript Errors Try Catch Throw


错误在所难免!

执行 JavaScript 代码时,可能会出现各种错误。

错误可能是程序员编写的代码错误、由于输入错误导致的错误,以及其他无法预见的情况:

  • 引用错误
  • 类型错误
  • 范围错误
  • URI 错误
  • 语法错误
  • Eval 错误(已弃用)
  • Silent 错误(下一章)

如何处理 JavaScript 错误

try 语句允许您定义一个代码块,并在执行过程中检查是否存在错误。

catch 语句允许您定义一段代码块,当 try 代码块中发生错误时,该代码块将被执行。

JavaScript 语句 trycatch 总是成对出现:

try {
  Block of code to try
}
catch(err) {
  Block of code to handle errors
}

ReferenceError 引用错误

如果您引用了一个不存在的变量,则会发生 ReferenceError 错误。

错误类型 示例 错误消息
ReferenceError fname = foo; foo is not defined
ReferenceError let x = y;
let y = 5;
Cannot access y before initialization

示例

您不能使用不存在的变量:

let x = 5;

try {
  x = y + 1;
}
catch(err) {
  let text = err.name;
}
亲自试一试 »

无法访问初始化前的变量:

try {
  let x = y;
  let y = 5;
}
catch(err) {
  let text = err.name;
}
亲自试一试 »

JavaScript 类型错误

当值类型错误或对该类型执行无效操作时,就会发生 类型错误

错误类型 示例 错误信息
TypeError Anna(5); Anna is not a function
Type Error let num = 1;
num.toUpperCase();
num.toUpperCase is not a function

示例

Anna() 不是一个函数。

try {
  Anna(5);
}
catch(err) {
  let text = err.name;
}
亲自试一试 »

您无法将数字转换为大写字母。

let num = 1;
try {
  num.toUpperCase();
}
catch(err) {
  let text = err.name;
}
亲自试一试 »

JavaScript RangeError 范围错误

当一个值超出其有效范围时,会发生 RangeError 错误。

错误类型 示例 错误消息
RangeError new Array(-1); Invalid array length
RangeError num.toPrecision(500); toPrecision() argument must be between 1 and 100

示例

您不能将数组元素的数量设置为 -1:

try {
  new Array(-1);
}
catch(err) {
  let text = err.name;
}
亲自试一试 »

您不能将数字的有效数字位数设置为 500。

let num = 1;

try {
    num.toPrecision(500);   // 一个数字不可能有500 significant digits
}
catch(err) {
  let text = err.name;
}
亲自试一试 »

JavaScript URI 错误

(统一资源标识符错误)

如果在 URI 函数中使用非法字符,则会发生 URIError 错误:

错误类型 示例 错误消息
URIError decodeURI("%%%"); URI malformed

示例

try {
    decodeURI("%%%");   // 您无法进行 URI 解码  percent signs
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}
亲自试一试 »

JavaScript 语法错误

当代码违反 JavaScript 的语法规则时,就会发生 语法错误

错误类型 示例 错误消息
SyntaxError fname = "John); Invalid or unexpected token )
SyntaxError Math.round(4.6; Missing ) after argument list

示例

在这个例子中,我们犯了一个错误,那就是没有闭合字符串:

// 此行无法被 JavaScript 解析
let fName = "John);

// 程序执行到此停止
亲自试一试 »

上述语句将产生以下错误:无效或意外的标记

程序将停止执行!

语法错误无法捕获

  • 语法错误无法通过 try...catch 捕获
  • 语法错误发生在运行时之前

示例

下面的代码应该会产生错误,但却没有:

try {
  let x = Math.round(4.6;)
}
catch(err) {
  let text = err.name + " " + err.description;
}
亲自试一试 »

语法问题

Math.round(4.6;)

上面的这行代码语法错误,是 JavaScript 代码。括号内多了一个分号。正确的语法应该是:

Math.round(4.6);

为什么

关键在于浏览器如何处理语法错误:

JavaScript 引擎会在运行脚本之前抛出一个 SyntaxError 异常。

语法错误会在 try...catch 代码块执行之前被捕获。

这意味着 try 代码块永远不会执行。脚本根本无法运行(没有 let text = update)。

注意

浏览器控制台(F12 > 控制台选项卡)会显示类似以下内容:

 

未捕获的语法错误:参数列表后缺少右括号。


JavaScript Eval 错误

EvalError 错误表示 eval() 函数中存在错误。

较新版本的 JavaScript 不会抛出 EvalError 错误。

请改用 SyntaxError 错误。



freew3c.com 中文网是独立运营的中文开发者学习平台,与 freew3c.com 无关联。提供的内容仅用于学习和测试,不保证内容的正确性。


Copyright @2020-2026 京ICP备888888号-8