배열 리터럴
자바스크립트의 배열은 이 언어 내 다른 모든 것들과 마찬가지로 객체다. 내장 생성자인 Array()로도 배열을 생성할 수 있지만 리터럴 표기법도 존재하며, 객체 리터럴과 마찬가지로 배열 리터럴 표기법이 더 간단하고 장점이 많다.
// 세 개의 원소를 가지는 배열
// 경고 : 안티패턴이다.
var a = new Array("itary", "bitsy", "spider");
// 위와 똑같은 배열
var a = ["itary", "bitsy", "spider"];
console.log(typeof a); // 배열도 객체이기 때문에 object 가 출력된다.
console.log(a.constructor === Array); // true
배열 생성자의 특이성
new Array(0를 멀리해야 하는 또다른 이유는 이 생성자가 품고 있는 함정을 피하기 위해서다. Array() 생성자에 숫자 하나를 전달할 경우, 이 값은 배열의 첫번째 원소 값이 되는 게 아니라 배열의 길이를 지정한다.
// 한 개의 원소를 가지는 배열
var a = [3];
console.log(a.length); // 1
console.log(a[0]) // 3
// 세개의 원소를 가지는 배열
var a = new Array(3);
console.log(a.length); // 3
console.log(typeof a[0]) // undefined
new Array()에 정수가 아닌 부동소수점을 가지는 수를 전달할 경우 더욱 예상 밖의 결과가 나온다. 부동소수점을 가지는 수는 배열의 길이로 유효한 값이 아니기 때문에 에러가 발생한다.
// 리터럴 사용
var a = [3.14]
console.log(a[0])
var a = new Array(3.14); // error: RangeError: invalid array length
conosle.log(typeof a); // undefined
배열인지 판별하는 방법
if(typeof Array.isArray === "undefined"){
Array.isArray = function(arg){
return Object.prototype.toString.call(arg) === "[object Array]";
}
}
'개발 > dev-patterns' 카테고리의 다른 글
자바스크립트 코딩 기법과 핵심 패턴 - 에러 객체 (0) | 2019.08.02 |
---|---|
자바스크립트 코딩 기법과 핵심 패턴 - JSON 다루기 (0) | 2019.08.02 |
자바스크립트 코딩 기법과 핵심 패턴 - new를 강제하는 패턴 (0) | 2019.08.01 |
자바스크립트 코딩 기법과 핵심 패턴 - 사용자 정의 생성자 함수 (0) | 2019.08.01 |
자바스크립트 코딩 기법과 핵심 패턴 - 객체 리터럴 (0) | 2019.07.31 |