HTMLCollection est-il un tableau?

Je comprends que HTMLCollection n'est pas en fait un tableau, sinon il serait défini comme un tableau. J'utilise une fonction d'aide que j'appelle isArray () pour détecter si un objet est un tableau ou non. J'utilise cette petite aide partout et j'ai eu des problèmes sur ce retour faux lors de la vérification d'une htmlCollection.

var isArray: function(obj) { var type = Function.prototype.call.bind( Object.prototype.toString ); return type(obj) === '[object Array]' || type(obj) === '[object HTMLCollection]'; } 

Est-ce qu'il serait faux de vérifier le type de htmlCollection dans cette fonction helper et de supposer que c'est la même chose qu'un tableau? Qu'est-ce qui le différencie? Outre ses éléments html par opposition aux objets javascript.

Non, c'est une HTMLCollection , pas une Array .

Il a des caractéristiques semblables à des Array.prototype , comme des propriétés numériques et une propriété .length , mais elle ne hérite pas de Array.prototype . Par conséquent, il n'a pas les méthodes de Array standard, et devrait donc être considéré comme étant différent.

Une autre différence significative est que HTMLCollection est une collection "en direct", ce qui signifie qu'elle se met à jour sous forme de mises à jour DOM. Si vous supprimez un de ses noeuds du DOM, il sera automatiquement supprimé de HTMLCollection .

Si vous envisagez une conversion de tableau, veuillez vous référer à cette publication:

Le moyen le plus efficace de convertir une HTMLCollection en une matrice .

Ils ont discuté de certaines méthodes, et la solution dans la réponse choisie a également fonctionné dans une situation que j'ai rencontrée.