在javascript中抛出用户定义的错误

时间:2013-03-21 13:17:21

标签: javascript

我试图在javascript中抛出一个异常,我试图在消息中给出异常一个数字,但我只是单独获取消息而不是数字为什么?我究竟做错了什么? 我的代码是:

function ain()
{
    var e = new Error("hello guys" ,12345);
    throw e;
}

(function() {
    try {
       ain();
    }
    catch(e) {
        alert(e.number+"     "+e.message);
    }
}());

输出结果为:

undefined     hello guys

4 个答案:

答案 0 :(得分:2)

Error constructor function没有“数字”属性。它只需要一个字符串消息(另外两个参数是非标准的,所以我不会提到它们。)

如果您确实需要使用完全自定义的错误对象,则只需抛出一个对象文字而不是错误:

try {
    throw { message: 'hello world', number: 12345};
} catch(e) {
    console.log(e.number + ': ' + e.message);
}

http://jsfiddle.net/FHc7v/1/

答案 1 :(得分:1)

如果要将不是行号的数字作为第二个参数传递,您可能需要考虑创建一个新的错误类型,该类型继承自主Error原型:

function MyError(msg, num)
{
    this.name = 'MyError';
    this.message = msg;
    this.number = num || 0;
}
MyError.prototype = new Error;
MyError.prototype.constructor = MyError;
//and if you want:
MyError.prototype.alertMsg = function()
{
    alert(this.name + ': ' + this.message + ' -- ' + this.number);
};

可以根据需要使用此增强错误对象:

function iThrow()
{
    throw new MyError('I throw errors with numbers', 123);
}
try
{
    iThrow();
}
catch(e)
{
    e.alertMsg();//alerts "MyError: I throw errors with numbers -- 123"
}

答案 2 :(得分:0)

您可以在此处找到更多信息,它也是特定于浏览器的:

http://help.dottoro.com/ljfhismo.php

答案 3 :(得分:-1)

如果您查看此方法的说明您将看到第二个参数是文件名而不是数字,第三个选项是错误的行号而不是错误代码。

new Error([message[, fileName[, lineNumber]]])