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, допомагаючи визначити справжні масиви.

автор: Bond

Загальний опис

автор: NagarD

Порада

Завжди перевіряйте, чи існує цей метод у поточній версії JavaScript, яку використовуєте. Метод Array.isArray() був введений у стандарті ECMAScript 5, тому переконайтеся, що ви працюєте зі сумісною версією мови.

автор: Bond
Порада

Коли ви хочете впевнитися, що змінна є масивом, використовуйте Array.isArray() замість інших методів перевірки типу, таких як typeof або instanceof. Це запобігає можливим проблемам, особливо якщо ви маєте справу з багатомірними масивами або масивами, створеними у різних вікнах чи фреймах.

автор: Bond
Порада

Зауважте, що метод Array.isArray() стає особливо корисним у сучасних JavaScript-додатках, де масиви можуть походити з різних контекстів або фреймів (наприклад, в великих веб-додатках або при роботі з іншими бібліотеками і фреймворками).

автор: Bond
Порада

Якщо ви працюєте з JSON-даними, які надходять з інших джерел, звертайте особливу увагу на структуру даних. Використання Array.isArray() може виявитись корисним для перевірки, чи є об'єкт масивом, перед тим як проводити з ним операції.

автор: Bond
Нотатка

Не забувайте, що Array.isArray() приймає один аргумент - об'єкт, який ви перевіряєте. Він поверне true, якщо це масив, і false, якщо це не масив. Будьте уважні, щоб передати правильний об'єкт у метод для отримання очікуваного результату.

автор: Bond

Синтаксис

Array.isArray(value)

Параметри

value

Значення, яке потрібно перевірити.

автор: Bond

Повернення

bool

true, якщо значення є масивом; в іншому випадку, false. Завжди повертається false, якщо значення є екземпляром TypedArray.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
4 4 5 10.5 12 9
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 5
Підтримка: серверні переглядачі
Переглядач Node.js Deno
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
автор: Bond

Чому 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);
}
автор: NagarD

Використання 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 });
автор: Bond

При перевірці належності до типу масиву рекомендується використовувати функцію 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
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід