2

我试图弄清楚为什么我的代码在使用以下语句调用它后没有抛出并显示错误消息(页面只是空白):

document.write(add(10,wrong_input));

程序.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;
}

程序.html

<html>
    <body>
    <pre><script src="program.js"></script></pre>
    <div></div>
    </body>
</html>
4

3 回答 3

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.writelnalert,因为前者在页面加载后运行时会覆盖整个文档。如果您想要更好看的东西,请直接操作 DOM(通过更改某些元素的 innerHTML、附加节点等)。

于 2013-03-26T20:25:36.847 回答
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在你的函数调用中做你的。不过就个人而言,我会说坚持第一个。

于 2013-03-26T20:26:07.570 回答
1

正如 bfaretto 评论的那样,您正在混合投掷和尝试。

throw 抛出您定义的异常,但您将其用作 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);
    }
} 
于 2013-03-26T20:34:50.627 回答