JavaScript异常无法正常工作

时间:2013-03-26 20:21:45

标签: javascript

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

  

文件撰写(添加(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>

3 个答案:

答案 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);
    }
}