我的问题很简单,但依赖于Javascript VM。
当捕获ReferenceError时(在我执行eval(...)的情况下),如何从错误对象中获取实际的标识符标记?
匹配“已知”错误消息并解析它们对我来说似乎过于苛刻,但现在是我唯一可用的选项。
编辑:目前我只是通过这样做来“匹配”V8和Firefox:
catch(e){
if (e.name === "ReferenceError"){
var varname = e.toString().replace("ReferenceError: ","")
.replace(" is not defined","").trim();
foobar(varname);
}
}
答案 0 :(得分:1)
您应该可以使用e.message
并将文字匹配到第一个空格。
以下代码适用于IE7 / IE8 / IE9 / IE10 / Chrome和Firefox。
try {
alert(tesssst);
} catch(e){
if (e.name === "ReferenceError" || e.name === "TypeError") { //IE7 uses TypeError instead
var variableName = e.message.substr(0, e.message.indexOf(" "));
//IE7 and IE8 fix (it adds ' around the variable name)
if (variableName.substr(0, 1) == "'" && variableName.substr(variableName.length - 1) == "'") {
variableName = variableName.substr(1, variableName.length - 2);
}
console.log(variableName); //tesssst
}
}
修改强>:
添加了IE7 / IE8修复程序
编辑2 :
有了一点正则表达式魔法,您可以将其更改为以下内容:
try {
alert(tesssst);
} catch(e){
if (e.name === "ReferenceError" || e.name === "TypeError") { //IE7 uses TypeError instead
var variableName = e.message.match(/^'?(.*?)'? /)[1];
console.log(variableName);
}
}