Розуміння призначення Array.of у JavaScript

pic
](https://www.pexels.com/photo/colorful-cutouts-of-the-word-purpose-4116640/)

У JavaScript метод Array.of був введений як частина специфікації ES6 (ECMAScript 2015). На перший погляд він може здатися зайвим. Адже навіщо використовувати Array.of(1, 2, 3), коли можна просто оголосити та ініціалізувати масив так: [1, 2, 3]?

Відповідь криється в особливості конструктора Array.

Особливість конструктора Array

У JavaScript конструктор Array поводиться по-різному в залежності від кількості переданих йому аргументів. Якщо передати кілька аргументів або один аргумент, який не є числом, то він створює масив з цих аргументів як елементів:

let array = new Array("a", "b", "c");  
console.log(array); // Виводить: ['a', 'b', 'c']

Однак, якщо передати лише одне число в конструктор Array, то він створить масив з довжиною, рівною цьому числу, і цей масив буде заповнений значенням undefined:

let array = new Array(3);  
console.log(array); // Виводить: [undefined, undefined, undefined]

Ця поведінка може призвести до непорозумінь та помилок у вашому коді.

Послідовність Array.of

Метод Array.of був введений, щоб вирішити цю проблему. Незалежно від кількості чи типу аргументів, Array.of створює новий екземпляр масиву з переданими аргументами як елементами:

let array = Array.of(3);  
console.log(array); // Виводить: [3]

У цьому випадку Array.of(3) створює масив з одним елементом — 3, що є більш інтуїтивно зрозумілим і менш схильним до помилок у порівнянні з поведінкою конструктора Array.

У підсумку, хоча для більшості випадків просте оголошення та ініціалізація масиву за допомогою нотації в дужках ([1, 2, 3]) є простішим і більш поширеним, Array.of пропонує послідовну та менш схильну до помилок альтернативу конструктору Array, коли потрібно створити масив з динамічним списком аргументів.

pic
](https://tahajiru.com/resources/promises)

Оригінально опубліковано на https://tahajiru.com.

Перекладено з: Understanding the Purpose of Array.of in JavaScript

Leave a Reply

Your email address will not be published. Required fields are marked *