Коротка відповідь
juniorArray.isArray(obj) — це статичний метод, що повертає true, якщо об’єкт є масивом. Перевірка працює навіть для об’єктів з різних iframe, тому не слід покладатися на `instanceof Array`. Приклад: `const res = Array.isArray([1,2]);`
Повне пояснення
Що це і навіщо
- Array.isArray – статичний метод, що визначає, чи є переданий аргумент масивом. Це корисно для валідації даних, коли тип об’єкта невідомий або може бути різним.
Ключові принципи
- Працює незалежно від контексту (iframe, worker тощо).
- Повертає
trueлише для реальних масивів, а не для об’єктів‑подібних до масиву (наприклад,arguments).
Як це працює
- Внутрішньо реалізовано через
Object.prototype.toString.call(value) === '[object Array]'.
Практика і реалізація
// JavaScript
const arr = [1, 2, 3];
console.log(Array.isArray(arr)); // true
// TypeScript – типізація
const maybeArr: unknown = getData();
if (Array.isArray(maybeArr)) {
// TS розуміє, що maybeArr: unknown[]
}
Тестування
import { describe, it, expect } from 'vitest';
describe('Array.isArray', () => {
it('should return true for arrays', () => {
expect(Array.isArray([1, 2])).toBe(true);
});
it('should return false for non-arrays', () => {
expect(Array.isArray({})).toBe(false);
});
});
Альтернативи
instanceof Arrayпрацює лише у тому самому контексті, що створив масив.ArrayBuffer.isView– для перевірки буферів, а не масивів.
Часті помилки
- Використання
typeof– повертає'object'для масивів. - Порівняння з
Array.prototype– не працює для різних контекстів. - Перевірка
length– масиви не єдиний тип з полемlength.
Чіткий чек‑ліст
- Якщо потрібна надійна перевірка масиву →
Array.isArray. - Якщо треба працювати з об’єктами‑подібними до масиву → використати
Object.prototype.toString. - Для типізації в TS – після перевірки можна уточнити тип як
unknown[].