JavaScript异常列表

Vik*_*kas 4 javascript exception-handling exception

这次我没有任何问题但只是为了好奇我想知道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>
Run Code Online (Sandbox Code Playgroud)

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

谢谢...

And*_*rew 13

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

  1. EvalError(由错误产生的错误eval();
  2. RangeError (当使用超出其使用范围的数字时产生 - 我实际上从未在现实生活中见过这个,我现在似乎无法生产它);
  3. ReferenceError (在尝试按名称访问对象的不存在成员时生成);
  4. SyntaxError;
  5. TypeError(当一种方法期望一种不同类型的值时); 和
  6. URIError (在尝试创建或解码URI时生成).

不幸的是,问题在于普遍不支持这些异常类型 - 两个大的缺点是Safari和Opera.同时,你会发现,lineNumberfileName只在Firefox浏览器(也许其他人?),你拿回字符串message会有所不同,从浏览器到浏览器.因此在实践中,最好避免使用这些并手动和更直接地管理异常处理.


aul*_*ron 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
    }
};
Run Code Online (Sandbox Code Playgroud)