我想获得所有全局变量的列表。在另一个答案,我发现了这个:
Object.keys( window );
问题是它还列出了全局定义的函数名称。有没有办法让那些不是功能的?
我试过了:
function Test() {
var f = Object.keys(window);
for (var i = 0; i < f.length; i++) {
if (typeof (f[i]) !== 'function') {
console.log(f[i]);
}
}
}
但它仍然显示功能。 谢谢。
答案 0 :(得分:2)
您可以在窗口上执行for..in
,并检查每个项目以确保它不是一个功能:
var globalVars = [];
for (var name in window) {
if (window.hasOwnProperty(name) && typeof window[name] != "function") {
globalVars.push(name);
}
}
答案 1 :(得分:2)
在您的代码中,f [i]是密钥,而不是分配给密钥的值。所以......
你正在检查密钥的typeof是不是'函数',它不是'函数',它总是'字符串'。
您希望测试的是:
if (typeof(window[f[i]]) !== 'function')
答案 2 :(得分:1)
你的方法是正确的,但这一行是错误的:
if (typeof (f[i]) !== 'function') {
由于f
是属性名称数组,因此项f[i]
将始终为字符串。要检查相应的window
属性是否为函数,请使用
if (typeof window[f[i]] !== 'function') {
答案 3 :(得分:1)
这是一个全面的列表:
var globals=Object.getOwnPropertyNames(__proto__)
.concat(Object.getOwnPropertyNames(window)).filter(function(a){
return !String(this[a]).match(/^function/) && typeof this[a] !== "function";
}).sort().filter(function(a,b,c){return c.lastIndexOf(a)===b; });
alert(globals);
编辑:为结果集添加了唯一的过滤器... 编辑:删除重复收集