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

Finding undefined variable name string in ReferenceError

本文关键字:变量名 字符串 未定义 ReferenceError 查找      更新时间:2023-09-26

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

您应该能够使用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);
    }
}