Является ли 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.
Ответы
Ответ 1
Нет, это HTMLCollection
, а не Array
.
Он имеет свойства, подобные Array, такие как числовые свойства и свойство .length
, но он не наследуется от Array.prototype
. Поэтому он не имеет стандартных методов Array
, поэтому их следует рассматривать как разные.
Еще одно существенное отличие состоит в том, что HTMLCollection
представляет собой "живую" коллекцию, что означает, что она обновляется как обновления DOM. Если вы удалите один из своих узлов из DOM, он автоматически удаляется из HTMLCollection
.
Ответ 2
Если вы рассматриваете преобразование массива, обратитесь к этому сообщению:
Самый эффективный способ преобразования HTMLCollection в массив.
Они обсудили некоторые методы, и решение в выбранном ответе также работало в ситуации, которую я испытал.