consideri l'esempio di codice JavaScript:JavaScript dichiarazione di matrice: new Array(), new Array (3), [ 'a', 'b', 'c'] creare array che si comportano in modo diverso
a = new Array();
a['a1']='foo';
a['a2']='bar';
b = new Array(2);
b['b1']='foo';
b['b2']='bar';
c=['c1','c2','c3'];
console.log(a);
console.log(b);
console.log(c);
Risultati nella console Firebug sono i seguenti:
per una (la '[]' doveva essere ampliata facendo clic sul pulsante '+'):
[]
a1 "foo"
a2 "bar"
per B:
[undefined, undefined]
per C:
["c1", "c2", "c3"]
Le mie domande sono:
- Sto usando la matrice della sintassi [ 'chiave'] 'value' = correttamente?
- Perché la matrice b non funziona come previsto?
- Perché gli array a e c sono visualizzati in modo diverso nella console? Sembra anche che jQuery non sia in grado di scorrere l'array a con il suo metodo .each().
- Potresti raccomandare qualche buon tutorial sul comportamento degli array Javascript?
NOTA: Firebug di Google Chrome visualizza solo [] per serie 'a', senza la possibilità di espanderla.
MODIFICA: OK, sembra che gli array in Javascript abbiano solo chiavi numeriche, quindi aggiungere una stringa come nome di chiave rende un oggetto fuori da un array. Ma perché jQuery non funziona?
$.each(a, function()
{
alert ('derp');
})
Questo codice, aggiunto allo script, non genera avvisi.
Stai confondendo gli oggetti array di JavaScript con gli array associativi disponibili in lingue come PHP. Gli array JavaScript utilizzano solo indici numerici. Usando la sintassi 'a ['a1'] = val' aggiunge una proprietà' a1' all'oggetto 'a', non un valore di matrice. –
@ P.Brian.Mackey: Probabilmente perché questo tipo di domande è stato chiesto molte volte su SO. – RightSaidFred
@exizt: Firebug e strumenti simili fanno presupposizioni su ciò che si desidera visualizzare. Non sono necessariamente una rappresentazione prefettizia della lingua, anche se, come indicato di seguito, è * generalmente * il migliore per fare affidamento solo su proprietà numeriche negli array JavaScript. – RightSaidFred