[]대신 new Array()를 사용해도 초기화는 될텐데 다른 레퍼런스(특히, 스택오버플로우)에서 new Array() 대신에 []를 사용하라고 한다.
왜 사용하지 말라고 하는걸까?
const a = new Array("123") // ["123"]
const b = new Array(123) // [empty x 123]
const c = ["123"] // ["123"]
const d = [123] // [123]
const e = new Array(1.2) // Uncaught RangeError: Invalid array length
const f = [1.2] // [1.2]
이유는 일관성이 부족하다는 점이다. 우리가 의도한대로면 c,d가 맞는데 b는 a와 다른 의도가 된다.
심지어 배열에 소수를 넣고 초기화하면 RangeError를 뱉는다.
이유는 new Array()는 배열을 초기화할때 length값을 ToUInt32를 사용하여 정수형으로 변환하기 때문에 그렇다. 이렇게 length값과 ToUInt32(length)의 결과값이 같지 않으면, RangeError exception을 발생시킨다는 걸 알 수 있다.
new Array(value)에서 value값이 Number로 주어지는지 아닌지, value값이 정수인지 아닌지에 따라서 동작이 다르기 때문에 (직관성, 일관성 부족!) 배열을 초기화 할때는 new Array()대신 []를 사용하자!