JS:在“新功能(...)”中获取错误行号

时间:2019-04-21 10:33:32

标签: javascript function error-handling

在我的应用程序中,我解析了一些用户输入,然后使用(new Function(...))()将其作为Javascipt代码运行。如果输入不正确,则会引发异常。我需要的是一种获取行号的方法,该行发生在已提供给new Function()的已分析字符串中。有可能吗?

1 个答案:

答案 0 :(得分:1)

为此,我们需要编写逻辑以从错误对象中捕获堆栈跟踪,并找出anonymous函数确切指示错误已引发的位置。

在Chrome中引发错误的行号表示为<anonymous>:5:17,而在Firefox中是Function:5:17

try{
 (new Function(`var hello = 10;
                const world = 20;
                let foo = 'bar';
                xyz; //simulating error here
 `))();
}catch(err){
   let line = err.stack.split("\n").find(e => e.includes("<anonymous>:") || e.includes("Function:"));
   let lineIndex = (line.includes("<anonymous>:") && line.indexOf("<anonymous>:") + "<anonymous>:".length) ||  (line.includes("Function:") && line.indexOf("Function:") + "Function:".length);
   console.log(+line.substring(lineIndex, lineIndex + 1) - 2);
}