2012-04-07 13 views
7

Stavo leggendo How can I get query string values in JavaScript? su Stackoverflow e questo pezzo di codice della prima risposta mi ha fatto chiedere perché 'vars.push()' sia usato in questo modo?Perché array.push() è utilizzato per creare un oggetto?

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; 
} 

Ma invece di questo:

var vars=[]; 
... 
vars.push(hash[0]); 
vars[hash[0]] = hash[1]; 

ho riscritto il codice come:

var vars={}; 
... 
vars[hash[0]] = hash[1]; 

e funziona. Ora le domande sono:

  • perché qualcuno dovrebbe usare un array per quel tipo di risposta?
  • e perché qualcuno dovrebbe utilizzare ARR.push(KEY) e quindi utilizzare il formato ARR[KEY]=VAL in seguito?

risposta

1

push() aggiunge i suoi argomenti, in ordine, alla fine della matrice. Modifica direttamente l'array, piuttosto che creare un nuovo array. push(), e il suo metodo associato pop(), usano gli array per fornire la funzionalità di uno stack first in, last out.

+2

qualsiasi langage con puntatori può fare OOP. quindi non esiste una lingua OOP, poiché OOP è una tecnica di programmazione, non un paradigma di langage. non ci sono "oggetti" in C ma si può fare OOP in C. javascript è una lingua procedurale. Schema o LISP non sono ad esempio. – mpm

2

Questi risultati in vars sono sia un array di chiavi che un dizionario.
L'unica buona ragione per cui riesco a pensare è di mantenere l'ordine dei parametri di query , che è not defined in un dizionario.

Ad ogni modo, vorrei notare che questo funzione rimuove i parametri di ricerca duplicati - mantiene solo l'ultimo valore (anche se la chiave sarebbe stato inserito più volte alla matrice)

1

spinta spingerà la chiave come l'ultimo tasto. Quindi ti permette di avere un ordine logico nell'array.

2

La funzione utilizza l'array sia come matrice sia come oggetto.

Come matrice contiene le chiavi della stringa di query. Come oggetto contiene proprietà denominate dalle chiavi nella stringa di query e le proprietà hanno i valori della stringa di query.

Quindi, m se la stringa di query per esempio si presenta: a=1&b=2, l'array contiene i due elementi "a" e "b", e ha le due proprietà a con il valore 1 e b con il valore 2 .

Problemi correlati