자바스크립트에 배열이라는 타입은 존재 x
자바스크립트의 배열은 객체이지만, 일반 객체와 구별된 특징 존재
차이점은 무엇일까?
자바스크립트 배열은 배열이 아니다?
배열은 2가지로 구분 가능
밀집 배열
희소 배열
배열을 생성하는 가장 간단한 방식
배열 리터럴에 요소를 생략하면 희소 배열이 생성
const arr = [1,,3];
//배열의 요소를 생략하면 희소 배열 생성
console.log(arr.length); // 3
console.log(arr); // [ 1, <1 empty item>, 3 ]
console.log(arr[1]); // undefined
인수의 개수에 따라 다르게 동작한다.
전달된 인수가 1개이며 숫자일 경우 - length 프로퍼티 값이 배열을 생성
전달된 인수가 없는 경우 - 빈 배열 생성
전달된 인수가 2개 이상이거나 숫자가 아닌 경우 - 인수가 요소로 갖는 배열 생성
// 인수가 1개이며 정수인 경우 -> 희소 배열 생성
const arr = new Array(10);
console.log(arr); // [ <10 empty items> ]
console.log(arr.length); // 10
console.log(Object.getOwnPropertyDescriptors(arr)); // { length: { value: 10, writable: true, enumerable: false, configurable: false } }
new Array(4294967295);
new Array(4294967296); // RangeError: Invalid array length
new Array(-1); // RangeError: Invalid array length
// 인수가 없는 경우 -> 빈 배열 생성
new Array(); // []
// 인수가 2개 이상이거나 숫자가 아닌 경우 -> 인수를 요소로 갖는 배열을 생성
new Array(1, 2, 3); // [1,2,3]
new Array({}); // [{}]
전달된 인수를 갖는 배열을 생성
인수가 1개이고 숫자여도 인수를 요소로 갖는 배열을 생성
const arr1 = Array.of(1);
const arr2 = Array.of(1, 2, 3);
const arr3 = Array.of("string");
console.log(arr1); // [ 1 ]
console.log(arr2); // [ 1, 2, 3 ]
console.log(arr3); // [ 'string' ]
ES6에 도입
유사배열 객체 OR 이터러블 객체를 인수로 전달받아 배열로 변환 후 반환한다.
// 유사 배열 객체를 배열로 변환
const arr1 = Array.from({ length: 2, 0: "a", 1: "b" });
// 이터러블 객체를 배열로 변환
// 문자열은 "이터러블 객체"이기도 하다.
const arr2 = Array.from("Hi");
console.log(arr1); // [ 'a', 'b' ]
console.log(arr2); // [ 'H', 'i' ]
배열도 객체이므로 배열의 특정 요소를 삭제하기 위해 delete 연산자 사용
희소 배열을 만들지 않으면서 배열을 삭제하는 경우 Array.prototype.splice 메서드를 사용할 것