我有一些使用vm
模块和runInNewContext
函数的代码,并执行动态生成的JavaScript代码.基本上是一个更安全的选择eval
.
代码(变量code
)可能包含语法错误,所以我想抓住它们并打印一些有用的信息.
try { vm.runInNewContext(code, sandbox, filename); } catch (e) { if (e instanceof SyntaxError) { // always false console.log(e.toString()); // "SyntaxError: Unexpected token ||" for example console.log(e.line); // how to get the line number? } }
我想用语法错误打印行号,但我有两个问题:
我不知道如何识别异常是否是SyntaxError
别的.instaceof
不起作用(更新 - 我可以使用e.name === "SyntaxError"
).
即使我能够识别它,我怎么能得到行号?可能吗?
提前致谢.
更新:我可以从中获取一些信息e.stack
- 但是,堆栈跟踪中最顶层的调用是runInNewContext
(带有其行号),但我仍然找不到内部的行号code
,这导致了异常(SyntaxError
).