我在Stackoverflow上阅读How can I get query string values in JavaScript?,第一个回复中的这段代码让我想知道为什么'vars.push()'会像这样使用?
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
但不是这样:
var vars=[];
...
vars.push(hash[0]);
vars[hash[0]] = hash[1];
我重写了代码:
var vars={};
...
vars[hash[0]] = hash[1];
它有效。现在的问题是:
ARR.push(KEY)
然后再使用ARR[KEY]=VAL
格式?答案 0 :(得分:2)
这导致vars
既是键数组又是字典
我能想到的唯一一个好理由是保留查询参数的 order ,即字典中的not defined。
无论哪种方式,我都会注意到这个函数会删除重复的查询参数 - 它只保留最后一个值(尽管密钥会多次插入到数组中)
答案 1 :(得分:2)
该函数将数组用作数组和对象。
作为数组,它包含查询字符串中的键。作为对象,它包含从查询字符串中的键命名的属性,并且属性具有查询字符串中的值。
因此,如果查询字符串的示例如下所示:a=1&b=2
,则数组包含两个项“a”和“b”,并且它具有两个属性a
及其值1
和b
的值为2
。
答案 2 :(得分:1)
Push将按键作为最后一个键。因此,它允许您在数组中拥有逻辑顺序。
答案 3 :(得分:1)
push()按顺序将其参数附加到数组的末尾。它直接修改数组,而不是创建新数组。 push()及其伴随方法pop()使用数组来提供先进先出堆栈的功能。