我试图找出为什么我的代码没有抛出并显示错误消息(页面只是空白)后我用以下语句调用它:
文件撰写(添加(10,wrong_input));
program.js
var add = function (a,b){
if(typeof a !== 'number' || typeof b !== 'number'){
throw{
name: 'TypeError',
message: 'add needs numbers'
} catch(e){
document.writeln(e.name + ': ' + e.message);
}
}
return a + b;
}
program.html
<html>
<body>
<pre><script src="program.js"></script></pre>
<div></div>
</body>
</html>
答案 0 :(得分:6)
throw
语句没有catch
子句,try
。你应该分开投掷和抓住。例如:
var add = function (a,b){
if(typeof a !== 'number' || typeof b !== 'number'){
throw{
name: 'TypeError',
message: 'add needs numbers'
}
}
return a + b;
}
try {
add('foo', 1);
} catch(ex) {
alert(ex.message);
}
请注意,我将document.writeln
替换为alert
,因为前者会在页面加载后运行时覆盖整个文档。如果你想要更好看的东西,直接操作DOM(通过改变一些元素的innerHTML,附加一个节点等)。
答案 1 :(得分:2)
您的错误处理代码稍微关闭,您不能抛出错误然后尝试将其写出来。你要么:
if(typeof a !== 'number' || typeof b !== 'number'){
document.write("TypeError" + ": " + "add needs numbers");
}
或者只是throw
它:
if(typeof a !== 'number' || typeof b !== 'number'){
throw {
message: "add needs numbers",
name: "TypeError"
}
}
然后在函数调用中执行try catch
。就个人而言,我会说坚持第一个。
答案 2 :(得分:1)
AS由bfaretto评论,你是混合投掷并尝试。
抛出抛出您定义的异常,但您将其用作try..catch块。以下是如何使用throw和try..catch的方法。
var add = function (a,b){
try {
if(typeof a !== 'number' || typeof b !== 'number'){
var n = {
name: 'TypeError',
message: 'add needs numbers'
};
throw n;
}
// throws an exception with a numeric value
} catch (e) {
console.log(e.name);
}
}