Псевдомассив - это объект, который похож на массив. У него есть числовые свойства, как у массивов. А также свойство length.
Чаще всего встречается при работе с DOM - все свойства, и методы, которые возвращают несколько элементов обычно возвращают именно псевдомассив. Например, свойство children возвращает псевдомассив дочерних элементов.
Хоть псевдомассивы и похожи на массивы, все же это обычные объекты. У них нет свойств, и методов массивов, таких как forEach, join, slice и др.
Примеры
Пример
У пcевдомассивов нет методов массивов. Поэтому следующий код выдаст ошибку:
var childs = document.body.children;
document.write(childs.push());
Пример
Так как у псевдомассивов есть числовые свойства и length, их можно перебирать в цикле. В этом примере выведем все дочерние элементы html:
var childs = document.documentElement.children;
for (var i = 0; i < childs.length; i++) {
alert(childs[i]);
}
Результат выполнения кода:
Пример
Воспользоваться методами массива можно несколькими способами. Суть одного из них в том, чтобы присвоить метод массива в свойство псевдомассива:
var childs = document.documentElement.children;
childs.join = [].join;
document.write(childs.join('<br>'));
Результат выполнения кода:
[object HTMLBodyElement]
Пример
Более продвинутый способ - сделать массив из псевдомассива. В данном примере с помощью метода call и метода slice псевдомассив превращается в полноценный массив со всеми методами:
var childs = document.documentElement.children;
childs = Array.prototype.slice.call(childs);
document.write(childs.join('<br>'));
Результат выполнения кода:
[object HTMLBodyElement]
Пример
Также превратить псевдомассив в массив можно создав новый массив, и скопировав в него все свойства псевдомассива:
var childs = document.documentElement.children;
var childsArr = [];
for (var i = 0; i < childs.length; i++) {
childsArr[i] = childs[i];
}
document.write(childsArr.join('<br>'));
Результат выполнения кода:
[object HTMLBodyElement]