Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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_Google Chrome Devtools - Fatal编程技术网

Javascript 有没有办法列出用户添加的所有全局(窗口)变量?

Javascript 有没有办法列出用户添加的所有全局(窗口)变量?,javascript,google-chrome-devtools,Javascript,Google Chrome Devtools,在Chrome Developer Tools的控制台中,如果我键入window并点击enter,我会得到一长串全局变量,它们是window对象的属性。有没有办法将其过滤到用户添加的、尚未内置到窗口对象中的内容?我认为这是不可能的,即使它是可能的。这是一种糟糕的做法。 相反,您可以在窗口对象上创建命名空间,如下所示: window.myApp=window.myApp | |{} myApp.variable1=value1; ... myApp.variableN=valueN 我认为这是不可

在Chrome Developer Tools的控制台中,如果我键入
window
并点击enter,我会得到一长串全局变量,它们是window对象的属性。有没有办法将其过滤到用户添加的、尚未内置到窗口对象中的内容?

我认为这是不可能的,即使它是可能的。这是一种糟糕的做法。 相反,您可以在窗口对象上创建命名空间,如下所示:

window.myApp=window.myApp | |{}

myApp.variable1=value1; ...
myApp.variableN=valueN

我认为这是不可能的,即使它是可能的。这是一种糟糕的做法。 相反,您可以在窗口对象上创建命名空间,如下所示:

window.myApp=window.myApp | |{}

myApp.variable1=value1; ...
myApp.variableN=valueN

除非chrome团队为这个特定案例构建了一些东西,否则答案是否定的

窗口只是一个对象。添加的属性不保留任何关于添加者、时间等的信息或元数据


如果需要(可能应该),请为要添加到窗口的属性添加前缀。这将防止与使用window的其他库发生冲突,然后您可以编写一个简单的for-in循环,只获取使用前缀的属性/值。

除非chrome团队为这种特殊情况构建了一些内容,否则答案是否定的

窗口只是一个对象。添加的属性不保留任何关于添加者、时间等的信息或元数据


如果需要(可能应该),请为要添加到窗口的属性添加前缀。这将防止与使用window的其他库发生冲突,然后您可以编写一个简单的for in循环,仅获取使用前缀的属性/值。

在添加全局变量缓存核心/预定义变量名称之前。添加新的全局变量后,您可以将新列表与旧列表进行比较,并打印新的全局变量

var predefined_variables = Object.keys(window);

window.newone = 'test';
window.xyz = 'testXYZ';

var new_variables = Object.keys(window).filter(function(key){
    return predefined_variables.indexOf(key)<0;
});

console.log(new_variables);
//["newone", "xyz"]
var预定义_变量=Object.keys(窗口);
window.newone='test';
window.xyz='testXYZ';
var new_variables=Object.keys(窗口).filter(函数(键){

返回预定义的变量。在添加全局变量之前,indexOf(key)缓存核心/预定义变量名称。添加新全局变量后,您可以将新列表与旧列表进行比较,并打印新的全局变量

var predefined_variables = Object.keys(window);

window.newone = 'test';
window.xyz = 'testXYZ';

var new_variables = Object.keys(window).filter(function(key){
    return predefined_variables.indexOf(key)<0;
});

console.log(new_variables);
//["newone", "xyz"]
var预定义_变量=Object.keys(窗口);
window.newone='test';
window.xyz='testXYZ';
var new_variables=Object.keys(窗口).filter(函数(键){
返回预定义的变量。indexOf(键)
//setTimeout是必需的,仅当属性添加和检查将按顺序进行时才在此处使用。为避免在当前时间间隔内获得相同的参考值,请检查应答代码
//获取当前窗口属性;
var windowInitProperties=Object.getOwnPropertyNames(窗口);
setTimeout(()=>window.newProperty='newProperty',0)
设置超时(()=>{
//列出新物业;
console.log(
Object.getOwnPropertyNames(窗口).filter(属性=>{
返回windowInitProperties.indexOf(property)<0;
})
);
},0)
//setTimeout是必需的,仅当属性添加和检查将按顺序进行时才在此处使用。为避免在当前时间间隔内获得相同的参考值,请检查应答代码
//获取当前窗口属性;
var windowInitProperties=Object.getOwnPropertyNames(窗口);
setTimeout(()=>window.newProperty='newProperty',0)
设置超时(()=>{
//列出新物业;
console.log(
Object.getOwnPropertyNames(窗口).filter(属性=>{
返回windowInitProperties.indexOf(property)<0;
})
);

}, 0)
Nice-是的,应该这样做。Nice-是的,应该这样做。我不反对你的观点。我在一个遗留应用程序中工作,不断看到他们定义的零散全局变量,所以我很想得到一个列表,看看他们创建了多少。我不反对你。我在一个遗留应用程序中工作,不断看到他们定义的零散全局变量定义,所以我很想得到一个列表,看看他们创建了多少。