Skip to main content

Що таке псевдомасив?

Псевдомасив (array-like object) - це об'єкт,

який виглядає як масив, але не є справжнім масивом.

Він має:

  1. числові індекси (0, 1, 2, ...),
  2. властивість length,
  3. але не має методів масиву (push, map, forEach тощо).

Приклади псевдомасивів:

1. arguments всередині функції

javascript
function showArgs() { console.log(arguments); } showArgs(10, 20, 30); // Arguments(3) [10, 20, 30, callee: ƒ, Symbol(Symbol.iterator): ƒ]

arguments виглядає як масив, але:

javascript
console.log(arguments[0]); // 10 console.log(arguments.length); // 3 console.log(arguments.map); // undefined

2. Колекції з DOM

javascript
const divs = document.querySelectorAll("div"); console.log(divs);

NodeList і HTMLCollection - це теж псевдомасиви. Вони містять елементи за індексами і length, але не мають методів map, filter тощо.


Чому це не масив

Справжній масив успадковує методи від Array.prototype, а псевдомасив - ні.

javascript
Array.isArray(arguments); // false

Як перетворити псевдомасив на справжній масив

1. Через Array.from()

javascript
function demo() { const arr = Array.from(arguments); console.log(Array.isArray(arr)); // true } demo(1, 2, 3);

2. Через spread-оператор (...)

javascript
function demo() { const arr = [...arguments]; console.log(arr); // [1, 2, 3] } demo(1, 2, 3);

3. Через slice.call()

javascript
function demo() { const arr = Array.prototype.slice.call(arguments); console.log(arr); // [1, 2, 3] } demo(1, 2, 3);

Коротко:

ВластивістьПсевдомасивСправжній масив
Є числові індексиТакТак
Є lengthТакТак
Є методи (map, push, filter)НіТак
Array.isArray() повертає trueНіТак

Приклади псевдомасивів у JavaScript:

ДжерелоТип
argumentsпсевдомасив аргументів функції
document.querySelectorAll()NodeList
document.getElementsByClassName()HTMLCollection
FileListсписок файлів з <input type="file">

Підсумок: Псевдомасив - це об'єкт, схожий на масив за структурою (індекси + length), але без методів масиву.

Щоб працювати з ним як зі звичайним масивом, можна перетворити його через Array.from() або [...spread].

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.