JavaScript异常列表

时间:2010-09-07 08:06:51

标签: javascript exception exception-handling

这次我没有任何问题,只是出于好奇,我想知道JavaScript中有多少例外。

例如我使用以下代码:

<script type="text/javascript">
    var x;
    try{
        x = 1 / 0;
        alert(x); // output: Infinity. FYI: JavaScript has Infinity property and it's value is 1.7976931348623157E+10308
        alert(funCreate());
    }
    catch(obj)
    {
        alert(obj.fileName);
        alert(obj.lineNumber);
        alert(obj.message); // output: funCreate is not defined
        alert(obj.name); // output: ReferenceError
        alert(obj.stack);
    };
</script>

这里,ReferenceError就像一个异常类型。因此,如果它被视为异常类型,那么我们可以按类型处理异常吗?就像我们都用其他编程语言一样。见link

...谢谢

3 个答案:

答案 0 :(得分:13)

我相信JS中有六种异常类型:

  1. EvalError(错误来自eval();
  2. RangeError(当使用超出使用范围的数字时产生 - 我实际上从未在现实生活中见过这个,我现在似乎无法生产它) ;
  3. ReferenceError(在尝试按名称访问对象的不存在成员时生成);
  4. SyntaxError;
  5. TypeError(当一个方法期望一个不同类型的值时);和
  6. URIError(在尝试创建或解码URI时生成)。
  7. 遗憾的是,问题在于普遍不支持这些异常类型 - 两个主要的缺点是Safari和Opera。同样,您会发现lineNumberfileName仅适用于Firefox(可能是其他人?),而message获取的字符串因浏览器而异。因此在实践中,最好避免使用这些并手动和更直接地管理异常处理。

答案 1 :(得分:4)

javascript中没有这样的语法,但你可以轻松实现类似的东西:

var x;
try{
    x = 1 / 0;
    alert(x); // output: Infinity. FYI: JavaScript has Infinity property and it's value is 1.7976931348623157E+10308
    alert(funCreate());
}
catch(obj)
{
    switch(obj.name) {
        case 'ReferenceError':
            alert(obj.fileName);
            alert(obj.lineNumber);
            alert(obj.message); // output: funCreate is not defined
            alert(obj.name); // output: ReferenceError
            alert(obj.stack);
        break;
        case 'AnotherError':
            //do other things
        break;

        default:
           //other stuff
    }
};

答案 2 :(得分:3)

您可以在JavaScript中抛出任何内容,因此没有可能的异常列表。如果您想查看默认异常对象的所有属性,我建议使用firebug的console.log() - 命令。