-1

我试图在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

4 回答 4

2

构造Error函数不采用“数字”属性。它只需要一个字符串消息(其他两个参数是非标准的,所以我不会提及它们)。

如果你真的需要使用一个完全自定义的错误对象,你可以只抛出一个对象字面量而不是一个错误:

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

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

于 2013-03-21T13:26:17.870 回答
2

如果你想传递一个不是行号的数字作为第二个参数,你可能需要考虑创建一个新的错误类型,它继承自主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"
}
于 2013-03-21T13:37:04.207 回答
0

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

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

于 2013-03-21T13:22:43.627 回答
-1

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

new Error([message[, fileName[, lineNumber]]])
于 2013-03-21T13:21:48.707 回答