菜单
×
   ❮     
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 HOME JS Introduction JS Where To JS Output JS Statements JS Syntax JS Comments JS Variables JS Let JS Const JS Operators JS Arithmetic JS Assignment JS Data Types JS Functions JS Objects JS Object Properties JS Object Methods JS Object Display JS Object Constructors JS Events JS Strings JS String Methods JS String Search JS String Templates JS Numbers JS BigInt JS Number Methods JS Number Properties JS Arrays JS Array Methods JS Array Search JS Array Sort JS Array Iteration JS Array Const JS Dates JS Date Formats JS Date Get Methods JS Date Set Methods JS Math JS Random JS Booleans JS Comparisons JS If Else JS Switch JS Loop For JS Loop For In JS Loop For Of JS Loop While JS Break JS Iterables JS Sets JS Set Methods JS Maps JS Map Methods JS Typeof JS Type Conversion JS Destructuring JS Bitwise JS RegExp JS Precedence JS Errors JS Scope JS Hoisting JS Strict Mode JS this Keyword JS Arrow Function JS Classes JS Modules JS JSON JS Debugging JS Style Guide JS Best Practices JS Mistakes JS Performance JS Reserved Words

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 对象

对象定义 对象原型 对象方法 对象属性 对象 Get / Set 对象保护

JS 函数

函数定义 函数参数 函数调用 函数 Call 函数 Apply 函数 Bind 函数闭包

JS 类

类入门 类继承 类静态

JS 异步

JS 回调 JS 异步 JS Promises JS Async/Await

JS HTML DOM

DOM 入门 DOM 方法 DOM Document DOM 元素 DOM HTML DOM 表单 DOM CSS DOM 动画 DOM 事件 DOM 事件监听器 DOM 导航 DOM 节点 DOM 集合 DOM 节点列表

JS Browser BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS Web APIs

Web API 入门 Web 表单 API Web History API Web Storage API Web Worker API Web Fetch API Web Geolocation API

JS AJAX

AJAX 入门 AJAX XMLHttp AJAX Request AJAX Response AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用 AJAX 示例

JS JSON

JSON 入门 JSON 语法 JSON vs XML JSON 数据类型 JSON 解析 JSON Stringify JSON 对象 JSON 数组 JSON 服务器 JSON PHP JSON HTML JSON JSONP

JS vs jQuery

jQuery 选择器 jQuery HTML jQuery CSS jQuery DOM

JS Graphics

JS Graphics 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 Bootcamp JS 证书

JS 参考

JavaScript 对象 HTML DOM 对象


JavaScript 错误


Throw, and Try...Catch...Finally

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

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

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

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


错误是不可避免的!

执行 JavaScript 代码时,可能会发生各种错误。

错误可能是程序员的编码错误、错误的输入错误,以及其他无法预料的情况。

示例

在此示例中,我们将 "alert" 拼写错误为 "adddlert" 以故意产生错误

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

<script>
try {
  adddlert("Welcome guest!");
}
catch(err) {
  document.getElementById("demo").innerHTML = err.message;
}
</script>
自己动手试一试 »

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


JavaScript try 和 catch

try 语句允许您定义一个代码块,在执行时对其进行错误测试。

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

JavaScript 的 trycatch 语句成对出现

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


JavaScript 抛出错误

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

这在技术上的术语是:JavaScript 将抛出异常(抛出错误)

JavaScript 将创建一个包含namemessage两个属性的Error 对象


throw 语句

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 "不是数字";
    x = Number(x);
    if(x < 5) throw "过低";
    if(x > 10) throw "过高";
  }
  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) {
  处理错误的 Adde
}
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 = "";
  }
}
自己动手试一试 »

Error 对象

JavaScript 有一个内置的错误对象,它在发生错误时提供错误信息。

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


Error 对象属性

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

Error Name 值

error name 属性可以返回六个不同的值

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

六个不同的值描述如下。


Eval Error

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

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


Range Error

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

例如:你不能将数字的有效数字位数设置为 500。

示例

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

Reference Error

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

示例

let x = 5;
try {
  x = y + 1;   // y 不能被使用(引用)
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}
自己动手试一试 »

Syntax Error

如果你尝试评估具有语法错误的 Adde,则会抛出 SyntaxError

示例

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

Type Error

如果操作数或参数与运算符或函数期望的类型不兼容,则会抛出 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;
}
自己动手试一试 »

非标准 Error 对象属性

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

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

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


完整的错误参考

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



×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持