Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据变量的内容而不是名称来查看变量?_Javascript_Global Variables_Local Variables_Javascript Debugger - Fatal编程技术网

Javascript 如何根据变量的内容而不是名称来查看变量?

Javascript 如何根据变量的内容而不是名称来查看变量?,javascript,global-variables,local-variables,javascript-debugger,Javascript,Global Variables,Local Variables,Javascript Debugger,我需要用其他值替换包含特定字符串或整数值的所有变量。例如,将包含gnl.fr的所有变量的值替换为nlg.com 在windbg(windbg连接到web浏览器进程)中,可以通过以下方式实现: .foreach (hit {s -[1]a 0 L?80000000 "gnl.fr"}) {ea ${hit} "nlg.com"} 但是,它会一次又一次地删除关键值,使web浏览器崩溃。 它应该完全可以在JavaScript级别执行,而不是处理web浏览器二进制文件 我不想只对全局变量这样做,但在任

我需要用其他值替换包含特定字符串或整数值的所有变量。例如,将包含
gnl.fr
的所有变量的值替换为
nlg.com

在windbg(windbg连接到web浏览器进程)中,可以通过以下方式实现:

.foreach (hit {s -[1]a 0 L?80000000 "gnl.fr"}) {ea ${hit} "nlg.com"}
但是,它会一次又一次地删除关键值,使web浏览器崩溃。
它应该完全可以在JavaScript级别执行,而不是处理web浏览器二进制文件

我不想只对全局变量这样做,但在任何地方都是可能的(我的意思是包括来自其他JavaScript函数的局部变量,而不是当前正在调试的JavaScript函数)

问题是我甚至不知道如何搜索当前范围之外的变量


在投票结束前,由于不清楚,请注意所有标签 !递归地遍历每个对象及其子对象。修改特定的子项。 要防止与递归相关的错误,可以指定要进入子级的子级的级别


以下示例注释中的进一步解释:

/**
将@inObj中匹配@toReplace的所有字符串替换为@replaceWith
*/
var replace=函数(inObj、toReplace、replaceWith、optionalArguments){
console.log(“before”,inObj);
变量递归=函数(obj,递归级别){
if(递归级别的类型==='undefined'){
递归级别=0;
}
递归级别++;
if(optionalArguments的类型!=“未定义”){
if(typeof optionalArguments.maxRecursionLevel!='undefined'&&recursionLevel>optionalArguments.maxRecursionLevel){//如果达到maxRecursionLevel,只需返回对象即可
返回obj;
}
}
对于(obj中的var b){
if(obj.hasOwnProperty的类型!=“未定义”&&obj.hasOwnProperty(b)){
如果(typeof obj[b]==“string”){//元素是一个字符串,那么我们在这里做实际工作:替换字符串
obj[b]=obj[b].替换(toReplace,replaceWith);
}else if(typeof obj[b]==“object”&&obj[b]){//元素是一个对象-作为对象“递归地”调用
obj[b]=递归(obj[b],递归级别);
}
}
}
返回obj;
}
inObj=递归(inObj);
console.log(“之后”,inObj);
返回inObj;
}
/**
测试对象的示例
*/
var testObj={
答:“abc”,
b:“xyz”,
c:{
aa:{
aaa:“abc”,
bbb:“abc”
},
bb:“abc”
},
d:{
aa:“abc”
}
};
替换(testObj,/bc/i,“X”{maxRecursionLevel:2});//两级
//替换(testObj,/bc/i,“X”);//适用于所有级别
/**
全球范围的例子
*/

//替换(window,/gnl.fr/i,“nlg.com”)您可以动态访问的唯一变量是全局变量,因为它们是
窗口的属性。无法获取所有局部变量。无需关闭此项。这是一个完全可以接受的问题。只是需要注意一下。这听起来像是个XY问题。你到底想用这个实现什么?如果你想让所有访问www.gnl.fr的权限都转到www.nlg.com,你可以在www.nlg.com的/etc/hosts文件中输入一个www.gnl.fr的条目。你为什么不截取
XMLHttpRequest.send()
并在数据中搜索要替换的字符串?我知道搜索全局字符串可能是第一步。在我的例子中,该值位于Json文件的解析数组中。所以,虽然它可以是全局的,但如何遍历窗口的子对象呢 ?我更新了我的答案,包括一个处理子类的递归方法。谢谢,以及如何处理太多的递归例外 ? (我的意思是,如果浏览器因为递归太深而发送错误,则跳过对象)。我也不希望有递归函数(chrome上的调用堆栈限制在1000以下)。问题是这些错误不能用try/catch捕获。现在我增加了对最大递归级别的支持