在ReferenceError中查找未定义的变量名称字符串

时间:2013-07-12 14:26:01

标签: javascript error-handling

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

1 个答案:

答案 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);
    }
}