L'utilizzo dell'oggetto Array in questo modo avverte molto, molto male . Rimuove completamente i vantaggi della classe Array e non aggiunge alcun valore.
L'intero punto di utilizzo degli array è ... beh .. trattarli come array. In questo modo puoi accedere a gadget come push
, pop
, shift
, splice
, sort
, join
, .length
ecc.
Considera solo cosa succede quando aggiungi poche proprietà al tuo array in questo modo:
var test = new Array();
test.prop1 = 'hi';
test.prop2 = 'ho';
test.prop3 = 'ha';
test.length; // returns 0
test.join() // returns ""
test.pop() // returns undefined ... and so on
Hai completamente cancellato la vera funzione di un array.
Anche il loop attraverso questa mostruosità è non banale , in quanto è necessario passare ogni proprietà attraverso hasOwnProperty
per verificare se è una proprietà impostata, o è qualcosa proveniente da Array.prototype. - come Doorknob ha sottolineato che le proprietà interne dell'array non sono visibili.
Non ho intenzione di iniziare con ciò che accade quando qualcuno tenta di assegnare una proprietà chiamata length
su questo oggetto, ecc.
Ora, c'è un modo giusto per memorizzare proprietà come questa, usando un oggetto semplice.
var test = {};
test.prop1 = 'hi';
test.prop2 = 'ho';
test.prop3 = 'ha';
Qui, puoi ancora eseguirne il loop recuperando le chiavi e i valori, ma la parte più importante di questa sintassi e per cosa viene usata spesso, è che puoi cercare direttamente il valore, senza eseguire il ciclo : %codice%. Questo è fantastico, perché non è necessario eseguire il looping di grandi oggetti / array per trovare la proprietà che si sta cercando.
Quindi ancora una volta - se vuoi memorizzare un gruppo di valori e trattarli come un array in cui puoi aggiungere / rimuovere elementi facilmente e usare test['prop1']
per controllare il numero di elementi ecc. - usa .length
class.
Se vuoi accedere all'elemento direttamente con la chiave, e non hai bisogno di alcuna funzionalità dell'array (pensa a hashmap), usa Array
semplice.
Ma per l'amor di Dio non utilizzare la classe Object
per la tua base hashmap.