JavaScript 错误(Error)
-
JavaScript正则表达式
try语句允许您测试代码块以查找错误。catch语句允许您处理错误。throw语句允许您创建自定义错误。finally语句允许您在try和catch之后执行代码,而不管结果如何。执行JavaScript代码时,可能会发生不同的错误。错误可能是程序员编写的错误,错误输入导致的错误以及其他不可预见的事情。在这个例子中,我们写了一个警告作为adddlert故意产生错误:
尝试一下try { adddlert("Welcome guest!"); } catch(err) { document.getElementById("demo").innerHTML = err.message; }
JavaScript将adddlert作为错误捕获,并执行catch代码来处理它。 -
JavaScript try...catch
try语句允许您定义一个代码块,以便在执行时检测错误。catch如果try块中发生错误,该语句允许您定义要执行的代码块。在JavaScript语句中try和catch成对出现的:try { 要尝试的代码块 } catch(err) { 用于处理错误的代码块 }
-
JavaScript引发错误
发生错误时,JavaScript通常会停止并生成错误消息。技术术语是:JavaScript将抛出异常(抛出错误)。JavaScript实际上会创建一个具有两个属性的Error对象: name和message。
-
throw声明
throw语句允许您创建自定义错误。从技术上讲,您可以抛出异常(抛出错误)。异常可以是JavaScript字符串、数字、布尔值或对象:throw "Too big"; // throw 一段文本 throw 500; // throw 一个数字
如果与try和catch一起使用throw,则可以控制程序流并生成自定义错误消息。 -
输入验证示例
此示例检查输入。如果值错误,则抛出异常(错误)。catch语句捕获异常(错误),并显示自定义错误消息:
尝试一下<!DOCTYPE html> <html> <meta charset="UTF-8" /> <title>菜鸟教程(cainiaoya.com)</title> <body> <p>请输入5到10之间的数字:</p> <input id="demo" type="text"> <button type="button" onclick="myFunction()">测试输入</button> <p id="p01"></p> <script> function myFunction() { var message, x; message = document.getElementById("p01"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") throw "没有输入"; if(isNaN(x)) throw "不是数字"; x = Number(x); if(x < 5) throw "太小了"; if(x > 10) throw "太大了"; } catch(err) { message.innerHTML = "输入的是: " + 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() { var message, x; message = document.getElementById("p01"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") 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有一个内置的Error对象,可在发生错误时提供错误信息。Error对象提供了两个有用的属性:name和message。Error对象属性属性 说明 name 设置或返回错误名称 message 设置或返回错误消息(字符串) name值:错误名称属性可以返回六个不同的值:属性 说明 EvalError eval()函数发生错误 RangeError 发生了一个“超出范围”的数字 ReferenceError 发生了非法引用 SyntaxError 发生语法错误 TypeError 发生了类型错误 URIError encodeURI()发生了错误 下面描述了六个不同的值:EvalError
EvalError表示eval()函数中的错误。较新版本的JavaScript不会抛出EvalError。改为SyntaxError。
RangeError
如果您使用超出合法值范围的数字,否则抛出RangeError错误。例如:您不能将数字的有效位数设置为500。
尝试一下var num = 1; try { num.toPrecision(500); // 一个数字不能有500位有效数字 } catch(err) { document.getElementById("demo").innerHTML = err.name; }
ReferenceError
如果您使用(引用)尚未声明的变量,则抛出ReferenceError错误 :
尝试一下var x; try { x = y + 1; // y无法引用(使用) } catch(err) { document.getElementById("demo").innerHTML = err.name; }
SyntaxError
如果您尝试使用语法错误来评估代码,则抛出SyntaxError错误。
尝试一下try { eval("alert('Hello)"); // 缺少'会产生错误 } catch(err) { document.getElementById("demo").innerHTML = err.name; }
TypeError
如果您使用超出预期类型范围的值,则抛出TypeError错误 :
尝试一下var num = 1; try { num.toUpperCase(); // 您无法将数字转换为大写 } catch(err) { document.getElementById("demo").innerHTML = err.name; }
URIError
如果在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)
不要在公共网站中使用这些属性。它们不适用于所有浏览器。完整的错误参考请查看参考手册