在ReferenceError中查找未定义的变量名称字符串
Finding undefined variable name string in ReferenceError
我的问题很简单,但依赖于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);
}
}
相关文章:
- AngularJS-在JSON选择器中使用变量名
- 命令行中的Uglify js;不要弄乱变量名
- 像createComment这样的各种自定义变量名在内联javascript中被覆盖,但在外部js中没有.为什么?
- JavaScript将字符串转换为变量名
- 如何将变量名转换为对象jQuery的索引字符串
- 如何传入字符串并将其用作变量名
- 将字符串转换为要在jQuery.animate中使用的变量名
- 将用户输入字符串指定为javascript中的新变量名
- JavaScript中的字符串形式的变量名
- 通过缩短变量名来减少json字符串的大小
- Javascript在对象内通过字符串引用变量名
- 在javascript中将字符串转换为变量名
- 将字符串附加到变量名
- 在Javascript中将变量名转换为字符串
- 将数组中的字符串文字转换为变量名
- Javascript变量名强制转换为字符串
- 在Angular.js中,为变量名添加字符串
- JavaScript中使用字符串/数组字符串作为变量名
- 双字符串变量名(Javascript)
- 多字符串变量名在Javascript中不起作用