Перейти до основного контенту

Як перевірити, чи є змінна масивом у JavaScript: найкращі способи

7 хв читання
2372 переглядів

При програмуванні на JavaScript часто виникає необхідність перевірити, чи є змінна масивом. Вивчення можливостей мови та пошук найбільш ефективних рішень є важливими навичками для кожного розробника.

У JavaScript існує кілька способів перевірки масиву. Один з них заснований на використанні вбудованого методу Array.isArray(), який повертає true, якщо передане значення є масивом, і false в противному випадку.

Даний метод найбільш надійний і рекомендується до використання, так як забезпечує сумісність з різними версіями JavaScript і виключає можливість приведення інших типів даних до масиву. Приклад використання методу Array.isArray() виглядає наступним чином:

Перевірка, чи є змінна масивом у JavaScript:

СпосібОпис
typeofВикористовуючи оператор typeof, можна перевірити тип змінної і переконатися, що він дорівнює "object" . Однак це не гарантує, що змінна є масивом. Наприклад, typeof null також поверне "object".
Array.isArrayФункція Array.isArray () є найнадійнішим способом перевірити, чи є змінна масивом. Вона повертає true, якщо змінна дійсно є масивом, інакше – false .
instanceof ArrayОператор instanceof дозволяє визначити приналежність змінної до певного типу, в даному випадку – масиву. Але якщо масив був створений в іншому вікні або фреймі, цей метод не спрацює.
Array.prototype.isArrayЦе власна властивість для масивів, яка була додана до специфікації ECMAScript 5. Ця властивість існує лише для масивів і повертає true . Цей метод підтримується в сучасних браузерах.

Використання будь-якого з цих способів залежить від вимог вашого проекту і від того, наскільки вам важлива надійність перевірки. Важливо пам'ятати, що деякі з цих методів можуть бути застарілими або не підтримуватися в деяких версіях JavaScript.

Визначення типу змінної в JavaScript

У JavaScript існує кілька способів визначити тип змінної. Це може бути корисно для уточнення вимог до певного типу даних або для перевірки умов перед виконанням певного коду.

Одним із простих способів визначити тип змінної є використання оператора typeof . Він поверне рядок, що містить інформацію про тип змінної.

let x = 10;console.log(typeof x); // "number"let y = "Hello";console.log(typeof y); // "string"let z = true;console.log(typeof z); // "boolean"

Оператор typeof може бути використаний для визначення типів даних, таких як число, рядок, логічне значення, об'єкт, функція, символ і undefined.

Крім того , існує оператор instanceof, який дозволяє перевірити, чи є змінна екземпляром певного класу чи конструктора.

let arr = [1, 2, 3];console.log(arr instanceof Array); // truelet obj = <>;console.log(obj instanceof Object); // truelet date = new Date();console.log(date instanceof Date); // true

Як видно з прикладів, оператор instanceof може бути використаний для визначення типів даних, таких як масив, об'єкт і дата.

Також можна використовувати функцію Array.isArray (), який перевіряє, чи є змінна масивом. Вона повертає true, якщо змінна є масивом , і false, якщо ні.

let arr = [1, 2, 3];console.log(Array.isArray(arr)); // truelet str = "Hello";console.log(Array.isArray(str)); // false

У цьому прикладі змінна arr є масивом, тому функція Array.isarray () повертає true . У той же час, змінна str є рядком, тому функція повертає false .

Таким чином, існує кілька способів визначення типу змінної в JavaScript , включаючи використання оператора typeof, оператора instanceof та функції Array.isArray() . Вибір способу залежить від необхідної точності і типу даних, який необхідно перевірити.

Використання оператора typeof для перевірки

Якщо змінна є масивом, тоді оператор typeof поверне "object". Однак цей метод не є ідеальним, оскільки він не може відрізнити масив від іншого об'єкта.

Для більш надійної перевірки, перед використанням оператора typeof, можна спочатку перевірити, чи є змінна об'єктом, використовуючи метод Array.isArray(). Цей метод поверне значення true, якщо змінна справді є масивом.

Нижче наведено приклад коду, який демонструє використання оператора typeof для перевірки:

let arr = [1, 2, 3];if (typeof arr === "object" && Array.isArray(arr)) else

Хоча цей метод не є абсолютно надійним, він є одним із найпоширеніших способів перевірити, чи є змінна масивом у JavaScript.

Використання методу Array.isArray()

Метод Array.isArray() дозволяє перевірити, чи є переданий аргумент масивом. Він повертає логічне значення, яке дорівнює true, якщо переданий аргумент є масивом, і false, якщо це не так.

Приклад використання методу Array.isArray():

let array = [1, 2, 3]; let is_array = Array.isArray(array); if (is_array) < console.log("Переменная является массивом"); >else

Метод Array.isArray() є надійним і безпосереднім способом перевірити, чи є змінна масивом. Він буде працювати у всіх сучасних браузерах і сумісний зі старими версіями JavaScript.

Перевірка наявності властивості length

Щоб перевірити, чи є змінна масивом за допомогою властивості length, достатньо написати такий код:

if (typeof myArray.length !== 'undefined')

// змінна є масивом

В даному коді ми перевіряємо, чи має змінна myArray властивість length, і якщо це так, то вважаємо її масивом.

Однак варто бути обережними при використанні цього способу перевірки. Наприклад, якщо змінна myArray оголошена, але не ініціалізована, вона матиме значення undefined, і перевірка наявності властивості length поверне false.

Тому перед перевіркою наявності властивості length рекомендується спочатку перевірити, чи є змінна оголошеною і чи не містить вона значення undefined:

if (typeof myArray !== 'undefined' && typeof myArray.length !== 'undefined')

// змінна є оголошеним масивом

Тепер ми можемо надійніше перевірити, чи оголошена змінна myArray і чи є вона масивом.

Цей спосіб перевірки працює надійно в більшості випадків, але в деяких особливих випадках, коли ми маємо справу з об'єктом, який може мати властивість length, але не є масивом, він може дати помилковий результат.

Тому для більш точної перевірки слід використовувати інші способи, такі як використання методів Array.isArray () або Array.from().

Використання конструктора Array та instanceof

Конструктор Array має особливість: якщо викликати його без аргументів, він створить порожній масив.

var arr = new Array();

if (arr instanceof Array)

console.log ("arr-це масив");

console.log ("arr - не масив");

В даному випадку, якщо змінна arr є масивом, умова всередині if поверне true і буде виведено повідомлення "arr - це масив". В іншому випадку буде виведено повідомлення "arr - не масив".

Використовувати конструктор Array і оператор instanceof зручно, так як він перевіряє не тільки саму змінну, але і її прототипне успадкування. Це дозволяє визначити, чи є змінна масивом, навіть якщо вона була створена іншим способом, наприклад, за допомогою літералу масиву.

Однак, слід пам'ятати, що оператор instanceof має деякі особливості, особливо у випадку з множинним успадкуванням. Він перевіряє, чи належить об'єкт до вказаного класу або до його нащадків. Отже, якщо змінна є екземпляром якогось класу, який також успадковує Array, instanceof також поверне true.

Крім того, використовуючи конструктор Array, можна створити масив потрібної довжини:

var arr = new Array(10); / / створює масив довжиною 10

console.log(arr); // [empty × 10]

Такий підхід може бути корисний, якщо потрібно заздалегідь створити масив з фіксованою кількістю порожніх елементів, які будуть заповнюватися пізніше.

Порівняння прототипу змінної з прототипом Array

Прототипи в JavaScript дозволяють визначити, до якого типу даних належить об'єкт. У випадку з масивами, їх прототипом є Array.prototype.

Щоб перевірити, чи є змінна масивом, можна скористатися оператором instanceof і порівняти її прототип з прототипом Array:

if (variable instanceof Array.prototype) else

Оператор instanceof перевіряє, чи належить змінна до вказаного прототипу. Якщо змінна є масивом, то оператор поверне true, інакше-false.

Цей спосіб є більш надійним, так як він враховує успадкування. Наприклад, якщо масив успадковує від іншого об'єкта, оператор instanceof все одно поверне true, як Array.prototype є прототипом для всіх масивів.

Однак, варто звернути увагу, що цей спосіб не підходить для перевірки масивів в інших вікнах або фреймах (cross-window або cross-frame).