为什么使用array.push()来创建一个对象?

时间:2012-04-07 08:47:30

标签: javascript

我在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格式?

4 个答案:

答案 0 :(得分:2)

这导致vars既是键数组又是字典 我能想到的唯一一个好理由是保留查询参数的 order ,即字典中的not defined

无论哪种方式,我都会注意到这个函数会删除重复的查询参数 - 它只保留最后一个值(尽管密钥会多次插入到数组中)

答案 1 :(得分:2)

该函数将数组用作数组和对象。

作为数组,它包含查询字符串中的键。作为对象,它包含从查询字符串中的键命名的属性,并且属性具有查询字符串中的值。

因此,如果查询字符串的示例如下所示:a=1&b=2,则数组包含两个项“a”和“b”,并且它具有两个属性a及其值1b的值为2

答案 2 :(得分:1)

Push将按键作为最后一个键。因此,它允许您在数组中拥有逻辑顺序。

答案 3 :(得分:1)

push()按顺序将其参数附加到数组的末尾。它直接修改数组,而不是创建新数组。 push()及其伴随方法pop()使用数组来提供先进先出堆栈的功能。