Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取页面中的所有(javascript)全局变量_Javascript - Fatal编程技术网

获取页面中的所有(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

是否有方法检索页面上所有全局变量的名称/值

我想编写一个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 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”)
    )的答案?这是一个全局变量,对吗?@gsamaras
    Object.keys
    在Chrome 5+、Firefox 4+、IE 9+和Opera 12+中提供。我看到了@rink.attendant.6,谢谢。pleshy,你可能想把这个加入你的答案中。。