1

我的问题很简单,但依赖于 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);
    }
 }
4

1 回答 1

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);
    }
} 
于 2013-07-12T14:49:34.247 回答