hsunny study blog

new Array() vs [] 본문

programming/javascript

new Array() vs []

헤써니 2019. 11. 27. 00:53

자바스크립트에서 배열을 선언하는 방식은 2가지가 있습니다.

 Array 객체를 이용한 선언 객체 리터럴을 이용한 선언
let arr = new Array(); let arr = [];

 

두 방식의 차이점에 대해 이야기해보도록 하겠습니다.

 

왜 new Array() 보다 []의 선호도가 높을까?

new Array()는 직관적이지 않습니다.

 

- Array 객체의 constructor에 전달하는 숫자가 1개인 경우와 2개 이상인 경우

A.

//run Chrome

let arr1 = new Array(5);

console.log(arr1);
// [empty × 5]

arr1.length
// 5

arr1[0];
// undefined

 

B.

//run Chrome

let arr2 = new Array(1, 2, 3, 4, 5);

console.log(arr2);
// [1, 2, 3, 4, 5]

arr2.length
// 5

arr2[0];
// 1
 

A와 같이 new Array의 constructor에 하나의 숫자만 넣으면 배열의 크기로 인식하지만, 두 개 이상의 숫자를 전달하면 전달받은 값으로 배열을 초기화합니다. A의 사유로 하나의 숫자만 넣은 배열을 만들 수가 없습니다.

 

- A에서 만들어진 배열을 스트링으로 변환

//run Chrome

arr1.toString();
// ',,,,'
 

위 실험을 통해 arr1의 크기는 5라는 것을 알 수 있습니다. (원소 사이에 ,가 생깁니다.)

 

- []를 이용하면 A 문제점이 사라짐

//run Chrome

let arr3 = [5];

arr3.toString();
// '5'

arr3[0];
// 5

arr3.length;
// 1
 

 

+ 간결하다는 장점으로 []의 사용을 권장한다고 합니다. 여기에서 더 많은 내용을 확인하실 수 있습니다.

속도 비교

테스트 코드

console.time('using[]')
for(var i=0; i<200000; i++){var arr = []};
console.timeEnd('using[]')

console.time('using new')
for(var i=0; i<200000; i++){var arr = new Array};
console.timeEnd('using new')
 

크롬에서는 []를 실행하는 것의 속도가 더 빨랐습니다.  상황에 따라 new Array()의 속도가 더 빠르게 나올 때도 있었지만 전반적으로 []의 실행속도가 빨랐습니다.

테스트 대상 브라우저 : Chrome, IE, Edge

Edge의 경우 실행시간의 차이가 세 브라우저 중 가장 컸습니다. (using[]: 392.3ms, using new: 948.4ms)

 

new Array에 크기를 지정한다면 []보다 더 빠르게 실행될 수도 있습니다. 테스트 내용, 원문에 대해서는 여기를 확인해주세요.

 

기타

[] 를 사용하여 초기화할 때 주의점

마지막 요소의 끝에 , 를 넣는 것은 지양해야 합니다. 브라우저마다 다르게 해석할 수 있습니다.

var cars = [
  "Saab",
  "Volvo",
  "BMW", // 여기 붙은 ,
];
 

원본 글은 여기에서 확인할 수 있습니다.