자바스크립트 개발을 하다가 일정 수준 이상이 되면, 코드 가독성 및 더 좋은 패턴에 대해 연구하게 되고, 널리 쓰이는 패턴을 사용하곤 한다.
물론 책으로도 대부분 접할 수가 있으며 JSHINT나, JSLINT와 같은 정적 검사 도구로 체크하여 잘못된 패턴을 지양하고, 좋은 패턴을 사용한다.
그 중 자바스크립트에서 가장 중요한 패턴이라고 알려진 Literal 표기법에 대해서 알아보자.
이 글에서는 우선 객체 선언만 다룰 예정이다.
우선 자바스크립트의 DATA Type은 총 7개가 있으며 아래와 같다.
위 리스트에서 6번까지는 primitive type이며 Object는 primitive가 아니다.
여기서 각 type별로 선언하는 여러가지 방법이 있지만 Object는 다음과 같이 주로 선언한다.
var obj1 = {};
var obj2 = new Object();
위 코드에서 obj1과 obj2 객체는 동일한 역할을 하게 된다.
즉 아무것도 없는 빈 객체를 생성해서, 향후 프로퍼티 또는 메소드를 추가할 수 있는 객체가 된다.
하지만 위 코드에서 좋은 패턴은 어떤 패턴일까?
주로 대부분의 글이며, 책, 자료에서는 아래와 같은 방식을 좋은 패턴이라고 말한다.
var obj1 = {}; // good pattern
위 코드를 바로 literal 표기법이라고 한다.
간단하게 객체를 선언할 수 있으며 아래와 같은 코드에서는 가독성 또한 좋아진다.
//객체 생성과 할당
var obj1 = {
a: 1,
b: 2
};
//객체 생성한 후 할당
var obj2 = new Object();
obj2.a = 1;
obj2.b = 2;
그렇다면 단순히 가독성을 위해서 {} 를 new Object에 비해 권장하는 것일까?
이제 본론으로 들어가자.
이번 내용을 공부하면서, 갖고 있던 근원적인 물음은 다음과 같다.
var str1 = "";
var str2 = new String();
console.log( typeof str1 ); // "string"
console.log( typeof str2 ); // "object"
위 코드에서 str1과 str2는 다르다.
Object = function(){
alert("재정의");
};
var obj1 = new Object(); //alert 발생
즉 Object란 내장함수 조차도 재정의 되어서 전혀 예상치 못한 결과를 초래할 수 있다.