0

我正在使用这个函数来抓取我的 url 并从中构建变量:

读取页面的 GET URL 变量并将它们作为“关联数组”返回。在 example.html?foo=asdf&bar=jkls 调用函数设置 map['foo']='asdf' 和 map['bar']='jkls'

我将如何添加一个 for 循环,以便

foo = map['foo']
bar = map['bar']

?

第一个解决方案不起作用。

4

2 回答 2

2

您可以像这样遍历地图

for (var key in map)
{
    window[key] = map[key];
}

这将创建window[foo] 和window[bar],它们与window.foo 和window.bar 相同,它们与foo 和bar 相同。

编辑:这是我正在使用的测试页面中正文的内容。jQuery 应该加载到头部只是因为我使用它来初始化我的测试并附加一个点击处理程序,但是 for 循环的概念不依赖于 jQuery。由于我没有进入我的地图,我在文档加载时自己创建它。从那时起,我就像我描述的那样循环遍历地图并将点击处理程序附加到按钮以测试正确的分配。

    <input type="button" />

    <script type="text/javascript" language="javascript">
        $(document).ready(function(){
            /* You don't need to build the map, you should already have it
            var map = new Object();
            map.foo='bar';
            map.test='meh';
            */

            // This is the loop from my original post
            for (var key in map)
            {
                window[key] = map[key];
            }

            // This is just a debug handler, you wouldn't need it
            $('input[type="button"]').click(function(){
                // This is very annoying, but proves that all three methods of access are valid for both variables
                alert(window['foo']);
                alert(window.foo);
                alert(foo);
                alert(window['test']);
                alert(window.test);
                alert(test);
                return false;
            });
        });
    </script>

于 2011-02-01T18:44:14.533 回答
1

为什么要使用所有这些变量来破坏全局命名空间?使用map.fooand有什么问题map.bar?——你知道map['foo']并且map.foo完全一样吗?

此外,您想要的非常不安全。如果有人用 URL 查询参数打开你的页面,?%24=test你会被搞砸的:jQuery 将不再工作,因为你已经覆盖了$全局变量。

另外,请记住 URL 参数通常不区分大小写,但 Javascript 是。因此,通常?KEY=value?key=value. map.keymap.KEY, 但是被视为不同的变量。

于 2011-02-02T17:30:17.720 回答