Array.isArray() в JavaScript — чи є значення масивом
Опис
Метод Array.isArray() дозволяє визначити, чи є конкретне значення масивом. Метод працює незалежно від класу Array до якого він прив'язаний. Він повертає true для будь-якого об'єкта, що був створений за допомогою літералу масиву або конструктора Array. Цей метод виявився незамінним у контекстах, де конструктор Array може відрізнятись, а також у ситуаціях, де використання оператора instanceof Array може викликати проблеми.
Приклад:
const data = [1, 2, 3];
if (Array.isArray(data)) {
console.log('Це масив!');
} else {
console.log('Це не масив.');
}
Array.isArray() також відкидає об'єкти, які мають у своєму ланцюжку прототипів Array.prototype, але не є справжніми масивами. Останнє має велике значення, тому що такі об'єкти будуть визнані оператором instanceof Array як масиви.
Слід пам'ятати, що в JavaScript існують об'єкти, які за своєю структурою можуть нагадувати масиви, але насправді такими не є. Наприклад:
- Об'єкти
NodeList(списки вузлів, які отримуються при роботі з DOM). - Об'єкт
arguments(спеціальний об'єкт, доступний всередині функцій для отримання переданих аргументів).
У таких випадках метод Array.isArray() поверне false, допомагаючи визначити справжні масиви.
Загальний опис
автор: NagarD
- Порада
-
Завжди перевіряйте, чи існує цей метод у поточній версії JavaScript, яку використовуєте. Метод
автор: BondArray.isArray()був введений у стандарті ECMAScript 5, тому переконайтеся, що ви працюєте зі сумісною версією мови. - Порада
-
Коли ви хочете впевнитися, що змінна є масивом, використовуйте
автор: BondArray.isArray()замість інших методів перевірки типу, таких якtypeofабоinstanceof. Це запобігає можливим проблемам, особливо якщо ви маєте справу з багатомірними масивами або масивами, створеними у різних вікнах чи фреймах. - Порада
-
Зауважте, що метод
автор: BondArray.isArray()стає особливо корисним у сучасних JavaScript-додатках, де масиви можуть походити з різних контекстів або фреймів (наприклад, в великих веб-додатках або при роботі з іншими бібліотеками і фреймворками). - Порада
-
Якщо ви працюєте з JSON-даними, які надходять з інших джерел, звертайте особливу увагу на структуру даних. Використання
автор: BondArray.isArray()може виявитись корисним для перевірки, чи є об'єкт масивом, перед тим як проводити з ним операції. - Нотатка
-
Не забувайте, що
автор: BondArray.isArray()приймає один аргумент - об'єкт, який ви перевіряєте. Він повернеtrue, якщо це масив, іfalse, якщо це не масив. Будьте уважні, щоб передати правильний об'єкт у метод для отримання очікуваного результату.
Синтаксис
Array.isArray(value)
Параметри
value-
Значення, яке потрібно перевірити.
автор: Bond
Повернення
bool-
автор: Bondtrue, якщо значення є масивом; в іншому випадку,false. Завжди повертаєтьсяfalse, якщо значення є екземпляромTypedArray.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 4 | 4 | 5 | 10.5 | 12 | 9 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 18 | 4 | 5 |
| Переглядач | ||
|---|---|---|
| 0.10.0 | 1.0 |
Приклади
+ запропонувати свій приклад у пісочниці
Цей приклад демонструє використання функції Array.isArray() для перевірки, чи об'єкт є масивом.
HTML
<header>
<h2 class="title">Перевірка, чи є об'єкт масивом</h2>
<p class="description">Приклад використання функції Array.isArray() для перевірки, чи є об'єкт масивом.</p>
</header>
<main>
<div id="output1"></div>
<div id="output2"></div>
<div id="output3"></div>
<div id="output4"></div>
</main>
CSS
body {
font-size: 16px;
line-height: 1.5;
font-family: monospace;
}
header {
background-color: #f1f1f1;
margin-bottom: 25px;
padding: 15px;
box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}
header h2.title {
padding-bottom: 15px;
border-bottom: 1px solid #999;
}
header p.description {
font-style: italic;
color: #222;
}
main {
display: grid;
grid-gap: 10px;
}
#output1, #output2, #output3, #output4 {
background-color: #f9f9f9;
padding: 10px;
border: 1px solid #ccc;
box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 0.5);
}
JS
console.log(Array.isArray([1, 3, 5]));
console.log(Array.isArray('[]'));
console.log(Array.isArray(new Array(5)));
console.log(Array.isArray(new Int16Array([15, 33])));
document.getElementById('output1').textContent = 'Результат перевірки [1, 3, 5]: ' + Array.isArray([1, 3, 5]);
document.getElementById('output2').textContent = 'Результат перевірки "[]": ' + Array.isArray('[]');
document.getElementById('output3').textContent = 'Результат перевірки new Array(5): ' + Array.isArray(new Array(5));
document.getElementById('output4').textContent = 'Результат перевірки new Int16Array([15, 33]): ' + Array.isArray(new Int16Array([15, 33]));
//# sourceURL=pen.js
Чому typeof і instanceof не годяться для перевірки масиву, і чому порожній масив істинний.
console.log(Array.isArray([]), Array.isArray([1, 2])); // true true
console.log(Array.isArray({}), Array.isArray('abc')); // false false
console.log(Array.isArray(null), Array.isArray(undefined)); // false false
// typeof не розрізняє масив і об'єкт
console.log(typeof [], typeof {}, typeof null); // object object object
// порожній масив істинний, хоча даних у ньому немає
const data = [];
console.log(Boolean(data), data == false, data.length > 0); // true true false
// «схоже на масив» — не масив
const fake = { 0: 'a', 1: 'b', length: 2 };
console.log(Array.isArray(fake), Array.from(fake)); // false ["a","b"]
// метод статичний: на екземплярі його немає
try {
[].isArray();
} catch (e) {
console.error(e.name + ': ' + e.message);
}
Використання Array.isArray().
// всі наступні виклики повертають true
Array.isArray([]);
Array.isArray([1]);
Array.isArray(new Array());
Array.isArray(new Array("a", "b", "c", "d"));
Array.isArray(new Array(3));
// Маловідомий факт: сам Array.prototype є масивом:
Array.isArray(Array.prototype);
// всі наступні виклики повертають false
Array.isArray();
Array.isArray({});
Array.isArray(null);
Array.isArray(undefined);
Array.isArray(17);
Array.isArray("Array");
Array.isArray(true);
Array.isArray(false);
Array.isArray(new Uint8Array(32));
// Це не масив, оскільки він не був створений за допомогою
// літерального синтаксису масиву або конструктора Array
Array.isArray({ __proto__: Array.prototype });
При перевірці належності до типу масиву рекомендується використовувати функцію Array.isArray() замість оператора instanceof, оскільки вона працює у всіх контекстах.
// При перевірці належності до типу масиву рекомендується використовувати функцію Array.isArray() замість оператора instanceof, оскільки вона працює у всіх контекстах (реалмах).
const iframe = document.createElement("iframe");
document.body.appendChild(iframe);
const xArray = window.frames[window.frames.length - 1].Array;
const arr = new xArray(1, 2, 3); // [1, 2, 3]
// Правильна перевірка належності до масиву
Array.isArray(arr); // true
// Прототипом arr є xArray.prototype, який є
// відмінним об'єктом від Array.prototype
arr instanceof Array; // false
Коментарі
Коментарів ще немає — будьте першим!