2012-04-07 90 views
7

我正在阅读Stackoverflow上的How can I get query string values in JavaScript?,这段代码从第一个回复中让我想知道为什么'vars.push()'是这样使用的?为什么使用array.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格式?

回答

1

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

+2

任何有指针的语言都可以做OOP。所以没有OOP语言,因为OOP是一种编程技术,而不是语言范例。 C中没有“对象”,但是你可以用C做OOP。javascript是一种程序语言。 Scheme或LISP不是例如。 – mpm 2012-04-07 09:10:20

2

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

无论哪种方式,我会注意这个功能可以去除重复的查询参数 - 只保留最后一个值(虽然将键多次插入到数组)

1

压栈会将密钥作为最后一个键。所以它允许你在数组中有一个逻辑顺序。

2

函数使用数组作为数组和对象。

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

所以,米如果例如查询字符串看起来像这样:a=1&b=2,阵列包含两个项目的“a”和“b”,并且它具有两个属性a与值1b与值2

相关问题