我试图在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
答案 0 :(得分:2)
Error
constructor function没有“数字”属性。它只需要一个字符串消息(另外两个参数是非标准的,所以我不会提到它们。)
如果您确实需要使用完全自定义的错误对象,则只需抛出一个对象文字而不是错误:
try {
throw { message: 'hello world', number: 12345};
} catch(e) {
console.log(e.number + ': ' + e.message);
}
答案 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)
您可以在此处找到更多信息,它也是特定于浏览器的:
答案 3 :(得分:-1)
如果您查看此方法的说明您将看到第二个参数是文件名而不是数字,第三个选项是错误的行号而不是错误代码。
new Error([message[, fileName[, lineNumber]]])