Javascript 有没有办法列出用户添加的所有全局(窗口)变量?
在Chrome Developer Tools的控制台中,如果我键入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 我认为这是不可
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-是的,应该这样做。我不反对你的观点。我在一个遗留应用程序中工作,不断看到他们定义的零散全局变量,所以我很想得到一个列表,看看他们创建了多少。我不反对你。我在一个遗留应用程序中工作,不断看到他们定义的零散全局变量定义,所以我很想得到一个列表,看看他们创建了多少。