这次我没有任何问题,只是出于好奇,我想知道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。
...谢谢
答案 0 :(得分:13)
我相信JS中有六种异常类型:
EvalError
(错误来自eval()
; RangeError
(当使用超出使用范围的数字时产生 - 我实际上从未在现实生活中见过这个,我现在似乎无法生产它) ; ReferenceError
(在尝试按名称访问对象的不存在成员时生成); SyntaxError
; TypeError
(当一个方法期望一个不同类型的值时);和URIError
(在尝试创建或解码URI时生成)。 遗憾的是,问题在于普遍不支持这些异常类型 - 两个主要的缺点是Safari和Opera。同样,您会发现lineNumber
和fileName
仅适用于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()
- 命令。