如何创建,设计和抛出内置的Error对象

时间:2011-10-31 19:04:13

标签: javascript firebug

更新

<小时/> [重写问题,专注于我试图理解的问题。]

JavaScript中是否有一种方法可以抛出异常,通知发生问题的行号?与C#的调试器类似,如果在第50行引发错误,那么我将被带到第50行。

例如,根据MDN EvalError代表eval()的错误。所以,假设我有一个使用eval()的函数。我想使用代表当前问题的特定错误EvalError

//As written here the error implies there is a problem on this line.  See Firebug console window
var evalErra = new EvalError('required element missing from evaluation');

var stringFunc = "a=2;y=3;document.write(x*y);";

EvalString(stringFunc);

function EvalString(stringObject) {
    //Some arbitrary check, for arguments sake let's say checking for 'x' makes this eval() valid.
    if(stringObject.indexOf('x') !== -1) {
        throw evalErra;
        //throw 'required element missing from evaluation';//This way offers no line number
    }
    eval(stringFunc);//The problem really lies in the context of this function.
}

如果我认为这一切都错了,那么请告诉我应该如何解决这些问题。

2 个答案:

答案 0 :(得分:1)

当你抛出错误时,当前代码的执行将停止,JS将继续执行树,直到它找到一个catch ()来处理抛出的特定类型的错误,或者获取所有错误直到树的顶部,导致“未处理的异常”错误:你抛出一个错误,没有抓住它,现在有人的窗户坏了。

try {
   if (true) {
      throw 'yup'
   }
} catch (e) { // catches all errors
   ... handle the error
}

答案 1 :(得分:1)

进行错误处理时,您需要执行以下操作

throw new Error("message");

然后,如果您处理此错误,请查看err.stack(firefox / opera / chrome)或err.line(Safari)或err.IE_Y_U_NO_SHOW_ME_ERROR_LINE_NUMBER(IE)以查找行号。

如果您愿意,可以继承Error