有没有一种方法可以检索页面上所有全局变量的名称/值?
我想编写一个JavaScript函数来执行以下操作:
- 查找以“xxx_”为前缀的所有全局变量,并将它们放入数组中(例如)
- 使用名称值对构建查询字符串,格式如下: xxx_glob_var1=value1&xxx_glob_var2=value2等等
我该怎么做?
有没有一种方法可以检索页面上所有全局变量的名称/值?
我想编写一个JavaScript函数来执行以下操作:
我该怎么做?
或者你可以简单地运行;
Object.keys(window);
它将显示一些额外的全局变量(大约5个),但远比使用for (var i in window)
方法少。
Object.keys在Chrome 5+,Firefox 4+,IE 9+和Opera 12中可用,感谢@rink.attendant.6提供的信息。
Object.keys
在 Chrome 5+、Firefox 4+、IE 9+ 和 Opera 12+ 中可用。 - rink.attendant.6类似以下内容:
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
}
一个测试用例:
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"
getGlobalProperties("Input")
)中?那不是全局变量吗? - Mads Skjern在某些情况下,您可能希望查找非可枚举属性; 因此for..in
不起作用(规范, 关于Chrome),Object.keys
也不行,因为两者都只使用可枚举键。请注意,for..in
与in
不同,但我们无法使用它进行迭代。
这里有一个解决方案,使用 Object.getOwnPropertyNames
(兼容性为IE9+)。我还添加了对仅想要枚举属性或者想要在上下文中搜索另一个的支持(而不是全局搜索)。
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..
然后如果你想加入例如
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
}
虽然如此,您将得到许多额外的DOM属性附加到窗口。
Object.keys(window);
显示的额外DOM属性要少得多。 - Dan DascalescuObject.keys(window);
其中 player、positon、ability、obj_need_save 和 xxx_saves 是我的实际全局变量。top、location、document、window、external、chrome、$、jQuery、matchMedia、jQuery1113010234049730934203、match_exists、player_exists、add_me、isLetter、create_match、delete_me、waiting、unsure、refresh、delete_match、jsfunction、check、set_global、autoheight、updateTextbox、update_match、update_player、alertify、swal、sweetAlert、save_match、$body、value_or_null、player、position、ability、obj_need_save、xxx_saves、previousActiveElement
我刚刚看到有一个类似的答案与另一个问题相关联。
window
上的所有自定义属性。 - KyleMit