获取页面中的所有(javascript)全局变量
是否有方法检索页面上所有全局变量的名称/值 我想编写一个javascript函数来执行以下操作:获取页面中的所有(javascript)全局变量,javascript,Javascript,是否有方法检索页面上所有全局变量的名称/值 我想编写一个javascript函数来执行以下操作: 查找所有前缀为“xxx_”的全局变量,并将其粘贴到数组中(例如) 使用名称-值对构建查询字符串,如下所示: xxx\u glob\u var1=value1&xxx\u glob\u var2=value2等 我该怎么做?您可以这样做: for (var i in window) { // i is the variable name // window[i] is the valu
我该怎么做?您可以这样做:
for (var i in window) {
// i is the variable name
// window[i] is the value of the variable
}
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
}
尽管如此,您将获得一系列附加到窗口的额外DOM属性。类似于以下内容:
for (var i in window) {
// i is the variable name
// window[i] is the value of the variable
}
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
}
A测试用途:
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"
在某些情况下,您可能希望找到非属性;因此,(,)不起作用,也不会,因为两者都只使用可枚举键。请注意,
for..in
与不同,但我们不能使用它进行迭代
下面是一个使用(兼容性为IE9+)的解决方案。我还添加了对以下情况的支持:您只需要可枚举属性,或者希望在上下文中搜索其他属性(而不是全局)
那么如果你想加入的话
findPrefixed('webkit').map(function (e) {return e+'='+window[e];}).join('&');
// "webkitAudioContext=function AudioContext() { [native code] }&webkitRTCPeerConnection=function RTCPeerConnection() etc..
或者你可以直接跑
Object.keys(window);
它将显示一些额外的全局变量(~5),但远远少于for(窗口中的var i)
答案
Object.keys在Chrome 5+、Firefox 4+、IE 9+和Opera 12、ty@rink.attendant.6中都有提供。6在我的例子中,两个最重要的答案不起作用,因此我添加了另一个答案,以突出Dan Dascalescu的评论:
Object.keys(window);
当我执行它时,它给出:
顶部,位置,文档,窗口,外部,chrome,$,jQuery,matchMedia,jQuery113010234049730934203,匹配存在,播放器存在,添加我,删除我,创建匹配,删除我,等待,不确定,刷新,删除匹配,jsfunction,检查,设置全局,自动高度,更新文本框,更新匹配,更新播放器,警报,swall,sweetAlert,保存匹配,body,value或null,player,职位,能力,目标需要保存,xxx保存,上一个活动元素
其中玩家、位置、能力、目标需要保存、xx保存是我实际的全局变量
我刚才看到存在一个类似于另一个问题的问题。
Object.keys(窗口)
显示的额外DOM属性要少得多。@DanDascalescu仍然超过200个,因此当想要获取仅由脚本创建的对象时,它是无用的。可能的重复项(除了微不足道的字符串构建部分)请参见以下关于为什么未列出InputEvent(getGlobalProperties(“Input”)
)的答案?这是一个全局变量,对吗?@gsamarasObject.keys
在Chrome 5+、Firefox 4+、IE 9+和Opera 12+中提供。我看到了@rink.attendant.6,谢谢。pleshy,你可能想把这个加入你的答案中。。