JavaScript 错误(Error)

  • JavaScript正则表达式

    try语句允许您测试代码块以查找错误。catch语句允许您处理错误。throw语句允许您创建自定义错误。finally语句允许您在trycatch之后执行代码,而不管结果如何。
    执行JavaScript代码时,可能会发生不同的错误。错误可能是程序员编写的错误,错误输入导致的错误以及其他不可预见的事情。
    在这个例子中,我们写了一个警告作为adddlert故意产生错误:
    try {
      adddlert("Welcome guest!");
    }
    catch(err) {
      document.getElementById("demo").innerHTML = err.message;
    }
    尝试一下
    JavaScript将adddlert作为错误捕获,并执行catch代码来处理它。
  • JavaScript try...catch

    try语句允许您定义一个代码块,以便在执行时检测错误。catch如果try块中发生错误,该语句允许您定义要执行的代码块。在JavaScript语句中trycatch成对出现的:
    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>蝴蝶教程(jc2182.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语句允许您在trycatch之后执行代码,而不管结果如何:
    语法:
    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)
    不要在公共网站中使用这些属性。它们不适用于所有浏览器。
    完整的错误参考请查看参考手册