Псевдомассив - это объект, который похож на массив. У него есть числовые свойства, как у массивов. А также свойство 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 HTMLHeadElement]
[object HTMLBodyElement]

Пример

Более продвинутый способ - сделать массив из псевдомассива. В данном примере с помощью метода call и метода slice псевдомассив превращается в полноценный массив со всеми методами:

var childs = document.documentElement.children;
childs = Array.prototype.slice.call(childs);
document.write(childs.join('<br>'));

Результат выполнения кода:

[object HTMLHeadElement]
[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 HTMLHeadElement]
[object HTMLBodyElement]