배열을 생성하는 방법에는 총 4가지가 있다. 배열 리터럴, Array 생성자 함수, Array.of, Array.from 각각의 특징을 알아보자.
const arr = [1, 2, 3];
console.log(arr.length); // 3
const arr = [];
console.log(arr.length); // 0
const arr = [1, , 3]; // 희소 배열
console.log(arr.length); // 3
console.log(arr); // [1, empty, 3]
console.log(arr[1]); // undefined
희소 배열이란?
- 배열의 요소가 연속적으로 위치하지 않고 일부가 비어 있는 배열 (ex. [1, , 3])
- 자바스크립트는 희소 배열을 문법적으로 허용
- 희소 배열의 length > 배열 요소의 개수
- 희소 배열은 성능에 좋지 않고 배열의 의미와 동떨어져 있기 때문에 권장하지 않음
- 배열에는 같은 타입의 요소를 연속적으로 위치시키는 것을 권장
전달된 인수가 1개이고 숫자인 경우
const arr = new Array(10);
console.log(arr); // [empty, empty, empty, ... , empty]
console.log(arr.length); // 10
new Array(); // []
new Array(1, 2, 3); // [1, 2, 3]
new Array({}); // [{}]
Array(1, 2, 3); // [1, 2, 3]
Array.of(1); // [1]
Array.of(1, 2, 3); // [1, 2, 3]
Array.of('hello'); // ['hello']
ES6에 도입
유사 배열 객체 또는 이터러블 객체를 인수로 전달받아 배열로 변환하여 반환
// 유사 배열 객체 -> 배열
Array.from({ length: 2, 0: 'a', 1: 'b' }); // ['a', 'b']
// 이터러블 -> 배열
Array.from('hello'); // ['h', 'e', 'l', 'l', 'o']
유사 배열 객체와 이터러블 객체
- 유사 배열 객체
- 배열처럼 인덱스로 프로퍼티 값에 접근 가능
- length 프로퍼티를 갖고 있음
- 배열처럼 for문으로 순회 가능
- 이터러블 객체
- Symbol.iterator 메서드를 구현하여 for...of문으로 순회 가능
- 스프레드 문법, 배열 디스트럭처링 할당 대상으로 사용할 수 있는 객체
- Array, String, Map, Set, DOM 컬렉션(NodeList, HTMLCollection), arguments 등이 해당
Array.from({ length: 3 }); // [undefined, undefined, undefined]
Array.from({ length: 3}, (_, i) => i); // [0, 1, 2]
출처 : 모던 자바스크립트 Deep Dive
덕분에 좋은 정보 얻어갑니다, 감사합니다.