Stavo pensando che se vuoi ricavarti un metodo standard per setacciare una HTMLCollection puoi fare così:

codice:
function HTMLStrictCollection(sElName, sElType) {
	Array.prototype.forEach.call(document.getElementsByTagName(sElName), function (oInputEl) { if (oInputEl.type === sElType) { Array.prototype.push.call(this, oInputEl); } }, this);
}
HTMLStrictCollection.prototype = HTMLCollection;

function ottieniCollezione() {
	var oMiaCollezione = new HTMLStrictCollection("input", "password");
	alert(oMiaCollezione.length);
}
Originariamente inviato da TrueLies
E' uguale Carlo - HTMLCollection è puristicamente più corretto ma all' atto pratico, per quel che ci devi fare, è una array. Chi usa getElementsByTagName fa uno scan con un ciclo, cioè utilizza l'oggetto come array: non esistono, sull' oggetto ritornato, operazioni che permettano di distinguere HTMLCollection da array.
Prova a utilizzare il metodo slice con una HTMLCollection, ad esempio così:
codice:
document.getElementsByTagName("input").slice(1, 3)
Non funzionerà mai, perché una HTMLCollection non ha il metodo slice. Se vuoi applicarlo a una HTMLCollection dovrai fare così:
codice:
Array.prototype.slice.call(document.getElementsByTagName("input"), 1, 3)
Ergo, una HTMLCollection è spesso interscambiabile con un'array, ma non sempre!

Originariamente inviato da TrueLies
Per quello che riguarda il metodo push è questione di preferenze personali - per fortuna in programmazione c'è più di un modo di fare le cose.
Io personalmente (ma non pretendo che la mia posizione debba essere condivisa) non uso push sift pop e unshift per manipolare una array in quanto come metodi esistono, ma solo quando, nella array che manipolo, voglio rendere patente l'aspetto FIFO o LIFO - e non è questo il caso.
Ma se uno vuole può usare anche push se preferisce.
Certo, ma c'è quasi sempre una via più performante di un'altra. Se non usi il metodo push sei costretto a leggere la proprietà length dell'array, che significa dispendio di processore. In un ciclo molto complesso può comportare tanto (prova a scrivere un programma di scacchi in javascript e ti assicuro che noterai la differenza!)

Originariamente inviato da TrueLies
semmai, forse ti è sfuggita una altra cosa (ti vedo dell' umore di discutere di teoria, e a me sta bene e lo dico senza ironie!), che invece è singolare nel mio codice:
inputPassword[++inputPassword.length-1]

Noti nulla di strano?
Beh se no n noti nulla, te lo rivelo io bastava scrivere: [inputPassword.length]
Come mai prima incremento e poi decremento, operazione apparentemente futile?
Sinceramente non capisco perché lo fai ... se pensi di preallocare la memoria sei sulla strada sbagliata.