Подтвердить что ты не робот

Является ли HTMLCollection массивом?

Я понимаю, что HTMLCollection на самом деле не массив, иначе он будет определен как массив. Я использую функцию help, которую я вызываю isArray(), чтобы определить, является ли объект массивом. Я использую этот маленький помощник повсюду, и я столкнулся с проблемами при возврате false при проверке на htmlCollection.

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

Неправильно ли проверять тип htmlCollection внутри этой вспомогательной функции и считать, что это то же самое, что и массив? Что делает его другим? Кроме его элементов html, в отличие от объектов javascript.

4b9b3361

Ответ 1

Нет, это HTMLCollection, а не Array.

Он имеет свойства, подобные Array, такие как числовые свойства и свойство .length, но он не наследуется от Array.prototype. Поэтому он не имеет стандартных методов Array, поэтому их следует рассматривать как разные.

Еще одно существенное отличие состоит в том, что HTMLCollection представляет собой "живую" коллекцию, что означает, что она обновляется как обновления DOM. Если вы удалите один из своих узлов из DOM, он автоматически удаляется из HTMLCollection.