在页面中获取所有(javascript)全局variables

有没有办法检索页面上所有全局variables的名称/值?

我想写一个JavaScript函数来执行以下操作:

  1. find所有以“xxx_”为前缀的全局variables并将它们粘贴在一个数组中(例如)
  2. 使用名称值对创build一个查询string,如下所示:xxx_glob_var1 = value1&xxx_glob_var2 = value2 etc

我如何做到这一点?

像这样的东西:

function getGlobalProperties(prefix) { var keyValues = [], global = window; // window for browser environments for (var prop in global) { if (prop.indexOf(prefix) == 0) // check the prefix keyValues.push(prop + "=" + global[prop]); } return keyValues.join('&'); // build the string } 

testing用法:

 var xxx_foo = "foo"; xxx_bar = "bar"; window.xxx_baz = "baz"; var test = getGlobalProperties('xxx_'); // test contains "xxx_baz=baz&xxx_bar=bar&xxx_foo=foo" 

或者你可以简单地跑步;

 Object.keys(window); 

它会显示一些额外的全局variables(〜5),但比for (var i in window)答案要less得多。

在某些情况下,您可能需要查找非枚举属性; 因此for..in将不起作用( spec , 关于chrome )Object.keys也不能使用枚举键。 注意for..inin不同in但是我们不能用它迭代。

这是一个使用Object.getOwnPropertyNames (兼容性是IE9 +)的解决scheme。 我也添加了支持,当你只想要枚举属性,或者如果你想在上下文(不全球)search另一个。

 function findPrefixed(prefix, context, enumerableOnly) { var i = prefix.length; context = context || window; if (enumerableOnly) return Object.keys(context).filter( function (e) {return e.slice(0,i) === prefix;} ); else return Object.getOwnPropertyNames(context).filter( function (e) {return e.slice(0,i) === prefix;} ); } findPrefixed('webkit'); // ["webkitAudioContext", "webkitRTCPeerConnection", "webkitMediaStream", etc.. 

那么如果你想join例如

 findPrefixed('webkit').map(function (e) {return e+'='+window[e];}).join('&'); // "webkitAudioContext=function AudioContext() { [native code] }&webkitRTCPeerConnection=function RTCPeerConnection() etc.. 

你可以做这样的事情:

 for (var i in window) { // i is the variable name // window[i] is the value of the variable } 

尽pipe如此,你会得到一堆额外的DOM属性附加到窗口。

就我而言,这两个最佳答案是行不通的,因此我又增加了一个答案,以突出Dan Dascalescu的评论:

 Object.keys(window); 

当我执行它,它给了:

顶部位置,文件,窗口,外部,铬,$,jQuery的,matchMedia,jQuery1113010234049730934203,match_exists,player_exists,add_me,isLetter,create_match,delete_me,等待着,不确定,刷新,delete_match,jsfunction,检查,set_global,autoheight,updateTextbox, update_match,update_player,alertify,SwaI位,sweetAlert,save_match,$身体,value_or_null,球员,位置,能力,obj_need_save,xxx_saves,previousActiveElement

玩家,positon,ability,obj_need_save,xx_saves是我的实际全局variables。


我刚才看到有另一个问题有类似的答案 。