Javascript 非函数的全局变量列表

Javascript 非函数的全局变量列表,javascript,Javascript,我想得到所有全局变量的列表。在另一个答案中,我发现: Object.keys( window ); 问题是它还列出了全局定义的函数名。有没有办法只得到那些不是函数的 我试过这个: function Test() { var f = Object.keys(window); for (var i = 0; i < f.length; i++) { if (typeof (f[i]) !== 'function') { cons

我想得到所有全局变量的列表。在另一个答案中,我发现:

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]);
        }
    }
}
功能测试(){
var f=Object.keys(窗口);
对于(变量i=0;i
但它仍在显示功能。
谢谢

您可以在
on窗口中为..执行一个
,并检查每个项目以确保它不是一个函数:

var globalVars = [];
for (var name in window) {
    if (window.hasOwnProperty(name) && typeof window[name] != "function") {
        globalVars.push(name);
    }
}

您可以在窗口上的
中为..执行一个
,并检查每个项目以确保它不是一个函数:

var globalVars = [];
for (var name in window) {
    if (window.hasOwnProperty(name) && typeof window[name] != "function") {
        globalVars.push(name);
    }
}

在代码中,f[i]是键,而不是分配给键的值。所以

您正在检查键的typeof不是“函数”,它不是,它始终是“字符串”

您的测试需要:

if (typeof(window[f[i]]) !== 'function')

在代码中,f[i]是键,而不是指定给键的值。所以

您正在检查键的typeof不是“函数”,它不是,它始终是“字符串”

您的测试需要:

if (typeof(window[f[i]]) !== 'function')

您的方法是正确的,但这一行是错误的:

由于
f
是一个属性名称数组,因此项
f[i]
将始终是一个字符串。要检查相应的
窗口
属性是否为函数,请使用

if (typeof window[f[i]] !== 'function') {

您的方法是正确的,但这一行是错误的:

由于
f
是一个属性名称数组,因此项
f[i]
将始终是一个字符串。要检查相应的
窗口
属性是否为函数,请使用

if (typeof window[f[i]] !== 'function') {

以下是一份综合清单:

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);
编辑:已将唯一筛选器添加到结果集。。。
编辑:删除重复采集这里有一个全面的列表:

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);
编辑:已将唯一筛选器添加到结果集。。。
编辑:删除重复采集

是否将其过滤掉?如果你是这个意思的话,没有一个函数可以获取不可调用属性的所有属性名。然后过滤掉它们?如果你是这个意思的话,没有一个函数可以获取不可调用属性的所有属性名。你对
Object.keys(window)
有什么期待?它既不是
window的属性,也不是它的原型的属性?我以为我在添加.keys()时得到了不同的计数,我想知道为什么,但我一定是看错了什么,很好,谢谢!你对
Object.keys(window)
有什么期望?它既不是
window的属性,也不是它的原型的属性?我想我在添加.keys()时得到了不同的计数,我想知道为什么,但我一定是看错了什么,很好,谢谢@thg435感谢您的修复!这个例程在这个页面上找到81个对象,我的找到88个,以防你需要额外的7个…这7个是(“无穷大”、“JSON”、“数学”、“NaN”、“事件”、“全局变量”和“未定义”)。。。哎哟,那就做6;)
window
在某些版本的IE中没有
hasOwnProperty
方法。您可以在代码中使用
Object.prototype.hasOwnProperty.call(window,name)
来克服此问题this@thg435谢谢你的修复!这个例程在这个页面上找到81个对象,我的找到88个,以防你需要额外的7个…这7个是(“无穷大”、“JSON”、“数学”、“NaN”、“事件”、“全局变量”和“未定义”)。。。哎哟,那就做6;)
window
在某些版本的IE中没有
hasOwnProperty
方法。您可以在代码中使用
Object.prototype.hasOwnProperty.call(window,name)
来克服此问题