二十五岁时我们都一样愚蠢、多愁善感,喜欢故弄玄虚,可如果不那样的话,五十岁时也就不会如此明智。
标题:JavaScript错误
try 语句让你测试代码块的错误.
catch 语句让你处理错误。
throw 语句让你创建自定义错误.
finally 语句允许执行代码, 在 try 和 catch 后, 不管结果如何.
错误会发生!
当执行JavaScript代码,可能产生不同的错误.
错误可能是程序员编码的错误,由于错误的输入,和其他不可预见的事情.
在这个例子中我们故意产生一个错误:
<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 try 和 catch 成对出现:
try { Block of code to try } catch(err) { Block of code to handle errors }
JavaScript 抛出错误
当错误发生时,JavaScript通常会停止并生成错误信息.
这个术语是:JavaScript将抛出一个异常(抛出一个错误).
JavaScript会创建一个有两个属性的错误对象:名称和信息。
throw 语句
throw 语句允许创建自定义错误。
技术上你可以抛出异常(抛出错误).
异常可以是JavaScript字符串,数字,布尔值或对象:
throw "Too big"; // throw a text throw 500; // throw a number如果try和catch一起使用并抛出,则可以控制程序流并生成自定义错误消息.
输入验证的例子
此示例检查输入。如果值是错误的,则抛出异常(错误).
异常(错误)由catch语句捕获,并显示自定义错误消息:
<!DOCTYPE html> <html> <body> <p>Please input a number between 5 and 10:</p> <input id="demo" type="text"> <button type="button" onclick="myFunction()">Test Input</button> <p id="message"></p> <script> function myFunction() { var message, x; message = document.getElementById("message"); message.innerHTML = ""; x = document.getElementById("demo").value; try { if(x == "") 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 { Block of code to try } catch(err) { Block of code to handle errors } finally { Block of code to be executed regardless of the try / catch result }function myFunction() { var message, x; message = document.getElementById("message"); 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 名称值
六个不同的值可以通过错误名称属性返回:
错误名称 描述 EvalError 在eval()函数时发生了一个错误 RangeError 发生超出范围错误的数字 ReferenceError 发生非法引用 SyntaxError 发生语法错误 TypeError 发生类型错误 URIError 在encodeURI()中发生一个错误 下面描述了六个不同的值.
Eval 错误
EvalError 表示eval()函数发生错误.
新版本的JavaScript不抛出任何EvalError。而是使用SyntaxError代替
范围错误
RangeError 如果使用了超出非法值范围的数字,则发生错误.
例如:不能将数字的有效位数设置为 500.
var num = 1; try { num.toPrecision(500); // A number cannot have 500 significant digits } catch(err) { document.getElementById("demo").innerHTML = err.name; }
引用错误
ReferenceError 如果使用(引用)尚未声明的变量,则引发:
var x; try { x = y + 1; // y cannot be referenced (used) } catch(err) { document.getElementById("demo").innerHTML = err.name; }语法错误
SyntaxError 如果代码有语法错误,则引发
try { eval("alert('Hello)"); // Missing ' will produce an error } catch(err) { document.getElementById("demo").innerHTML = err.name; }
类型错误
TypeError 如果使用超出预期类型范围的值,则引发:
var num = 1; try { num.toUpperCase(); // You cannot convert a number to upper case } catch(err) { document.getElementById("demo").innerHTML = err.name; }
URI 错误
URIError 如果你在一个URI函数中使用非法字符:
try { decodeURI("%%%"); // You cannot URI decode these percent signs } catch(err) { document.getElementById("demo").innerHTML = err.name; }
非标准错误对象属性
Mozilla和微软的一些非标准误差定义对象的属性:
fileName (Mozilla) lineNumber (Mozilla) columnNumber (Mozilla) stack (Mozilla) description (Microsoft) number (Microsoft)
不要在公共网站中使用这些属性。他们不会在所有浏览器中工作。