Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

JS 教程

JS 主页 JS 简介 JS 何处 JS 输出 JS 语句 JS 语法 JS 注释 JS 变量 JS Let JS Const JS 运算符 JS 算术 JS 赋值 JS 数据类型 JS 函数 JS 对象 JS 对象属性 JS 对象方法 JS 对象显示 JS 对象构造函数 JS 事件 JS 字符串 JS 字符串方法 JS 字符串搜索 JS 字符串模板 JS 数字 JS BigInt JS 数字方法 JS 数字属性 JS 数组 JS 数组方法 JS 数组搜索 JS 数组排序 JS 数组迭代 JS 数组常量 JS 日期 JS 日期格式 JS 日期获取方法 JS 日期设置方法 JS 数学 JS 随机数 JS 布尔值 JS 比较 JS If Else JS Switch JS 循环 For JS 循环 For In JS 循环 For Of JS 循环 While JS Break JS 可迭代对象 JS 集合 JS 集合方法 JS 地图 JS 地图方法 JS Typeof JS 类型转换 JS 解构 JS 位运算 JS 正则表达式 JS 运算符优先级 JS 错误 JS 范围 JS 提升 JS 严格模式 JS this 关键字 JS 箭头函数 JS 类 JS 模块 JS JSON JS 调试 JS 样式指南 JS 最佳实践 JS 错误 JS 性能 JS 保留字

JS 版本

JS 版本 JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS 2019 JS 2020 JS 2021 JS 2022 JS 2023 JS 2024 JS IE / Edge JS 历史

JS 对象

对象定义 对象原型 对象方法 对象属性 对象获取/设置 对象保护

JS 函数

函数定义 函数参数 函数调用 函数调用 函数应用 函数绑定 函数闭包

JS 类

类简介 类继承 类静态

JS 异步

JS 回调函数 JS 异步 JS Promise JS Async/Await

JS HTML DOM

DOM 简介 DOM 方法 DOM 文档 DOM 元素 DOM HTML DOM 表单 DOM CSS DOM 动画 DOM 事件 DOM 事件监听器 DOM 导航 DOM 节点 DOM 集合 DOM 节点列表

JS 浏览器 BOM

JS 窗口 JS 屏幕 JS 位置 JS 历史 JS 导航器 JS 弹出警报 JS 定时 JS Cookie

JS Web API

Web API 简介 Web 表单 API Web 历史 API Web 存储 API Web Worker API Web Fetch API Web Geolocation API

JS AJAX

AJAX 简介 AJAX XMLHttp AJAX 请求 AJAX 响应 AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用 AJAX 例子

JS JSON

JSON 简介 JSON 语法 JSON vs XML JSON 数据类型 JSON 解析 JSON 字符串化 JSON 对象 JSON 数组 JSON 服务器 JSON PHP JSON HTML JSON JSONP

JS vs jQuery

jQuery 选择器 jQuery HTML jQuery CSS jQuery DOM

JS 图形

JS 图形 JS Canvas JS Plotly JS Chart.js JS Google Chart JS D3.js

JS 例子

JS 例子 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS 浏览器 JS 编辑器 JS 练习 JS 问答 JS 网站 JS 面试准备 JS 集训营 JS 证书

JS 参考

JavaScript 对象 HTML DOM 对象


JavaScript 错误


抛出和尝试...捕获...最终

The try 语句定义一个要运行的代码块(尝试)。

The catch 语句定义一个代码块来处理任何错误。

The finally 语句定义一个无论结果如何都要运行的代码块。

The throw 语句定义一个自定义错误。


错误会发生!

在执行 JavaScript 代码时,可能会发生不同的错误。

错误可能是程序员犯的编码错误,可能是由于输入错误,也可能是其他不可预见的事情。

例子

在这个例子中,我们将 "alert" 拼写成 "adddlert" 来故意产生错误

<p id="demo"></p>

<script>
try {
  adddlert("欢迎访客!");
}
catch(err) {
  document.getElementById("demo").innerHTML = err.message;
}
</script>
自己尝试 »

JavaScript 将adddlert 视为错误,并执行 catch 代码来处理它。


JavaScript 尝试和捕获

The try 语句允许你定义一个代码块,以便在执行时测试其是否有错误。

The catch 语句允许你定义一个代码块,以便在 try 块中发生错误时执行。

JavaScript 语句 trycatch 成对出现

try {
  要尝试的代码块
}
catch(err) {
  处理错误的代码块
}


JavaScript 抛出错误

当发生错误时,JavaScript 通常会停止并生成一条错误消息。

这个技术术语是:JavaScript 会抛出异常(抛出错误)

JavaScript 实际上会创建一个Error 对象,它有两个属性:namemessage


throw 语句

The throw 语句允许你创建自定义错误。

从技术上讲,你可以抛出异常(抛出错误)

异常可以是 JavaScript StringNumberBooleanObject

throw "Too big";    // 抛出一个文本
throw 500;          // 抛出一个数字

如果您将 throwtrycatch 结合使用,您可以控制程序流程并生成自定义错误消息。


输入验证示例

此示例检查输入。如果值错误,则会抛出异常 (err)。

异常 (err) 被 catch 语句捕获,并显示自定义错误消息

<!DOCTYPE html>
<html>
<body>

<p>请输入 5 到 10 之间的数字:</p>

<input id="demo" type="text">
<button type="button" onclick="myFunction()">测试输入</button>
<p id="p01"></p>

<script>
function myFunction() {
  const message = document.getElementById("p01");
  message.innerHTML = "";
  let x = document.getElementById("demo").value;
  try {
    if(x.trim() == "") throw "empty";
    if(isNaN(x)) throw "not a number";
    x = Number(x);
    if(x < 5) throw "too low";
    if(x > 10) throw "too high";
  }
  catch(err) {
    message.innerHTML = "Input is " + err;
  }
}
</script>

</body>
</html>
自己尝试 »

HTML 验证

上面的代码只是一个示例。

现代浏览器通常会使用 JavaScript 和内置 HTML 验证的组合,使用 HTML 属性中定义的预定义验证规则

<input id="demo" type="number" min="5" max="10" step="1">

您可以在本教程的后续章节中了解更多关于表单验证的信息。


finally 语句

finally 语句允许您在 try 和 catch 之后执行代码,无论结果如何

语法

try {
  要尝试的代码块
}
catch(err) {
  处理错误的代码块
}
finally {
  无论 try / catch 结果如何,都要执行的代码块
}

例子

function myFunction() {
  const message = document.getElementById("p01");
  message.innerHTML = "";
  let x = document.getElementById("demo").value;
  try {
    if(x.trim() == "") throw "is empty";
    if(isNaN(x)) throw "is not a number";
    x = Number(x);
    if(x > 10) throw "is too high";
    if(x < 5) throw "is too low";
  }
  catch(err) {
    message.innerHTML = "Error: " + err + ".";
  }
  finally {
    document.getElementById("demo").value = "";
  }
}
自己尝试 »

错误对象

JavaScript 具有内置的错误对象,该对象在发生错误时提供错误信息。

错误对象提供了两个有用的属性:name 和 message。


错误对象属性

属性描述
name设置或返回错误名称
message设置或返回错误消息(字符串)

错误名称值

错误名称属性可以返回六个不同的值

错误名称描述
EvalErroreval() 函数中发生错误
RangeError发生了“超出范围”的数字
ReferenceError发生了非法引用
SyntaxError发生了语法错误
TypeError发生了类型错误
URIErrorencodeURI() 中发生错误

下面描述了六个不同的值。


Eval 错误

EvalError 指示 eval() 函数中的错误。

较新的 JavaScript 版本不会抛出 EvalError。使用 SyntaxError 代替。


范围错误

如果使用超出合法值范围的数字,则会抛出 RangeError

例如:您无法将数字的有效数字位数设置为 500。

例子

let num = 1;
try {
  num.toPrecision(500);   // 数字不能有 500 位有效数字
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}
自己尝试 »

引用错误

如果使用(引用)未声明的变量,则会抛出 ReferenceError

例子

let x = 5;
try {
  x = y + 1;   // 无法使用(引用)y
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}
自己尝试 »

语法错误

如果尝试评估包含语法错误的代码,则会抛出 SyntaxError

例子

try {
  eval("alert('Hello)");   // 缺少 ' 会产生错误
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}
自己尝试 »

类型错误

如果操作数或参数与运算符或函数期望的类型不兼容,则会抛出 TypeError

例子

let num = 1;
try {
  num.toUpperCase();   // 无法将数字转换为大写
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}
自己尝试 »

URI(统一资源标识符)错误

如果在 URI 函数中使用非法字符,则会抛出 URIError

例子

try {
  decodeURI("%%%");   // 无法 URI 解码百分号
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}
自己尝试 »

非标准错误对象属性

Mozilla 和 Microsoft 定义了一些非标准错误对象属性

fileName (Mozilla)
lineNumber (Mozilla)
columnNumber (Mozilla)
stack (Mozilla)
description (Microsoft)
number (Microsoft)

不要在公共网站上使用这些属性。它们不会在所有浏览器中都能正常工作。


完整错误参考

有关错误对象的完整参考,请访问我们的 完整 JavaScript 错误参考



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.