본문 바로가기

JavaScript

자바스크립트 코딩 기법과 핵심 패턴 : 3장 리터럴과 생성자

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

요즘 개인적으로 자바스크립트를 공부하고 있다. 하지만 내 경우 어정쩡하게 알고 있는 자바스크립트라 기초책은 보나마나인데, 이 책은 정말 실무에서도 바로 쓸 수 있는 패턴을 뽑아서 먹여주는 책 같다. 이 책과 더불어 자바스크립트 성능 최적화도 보면 정말 좋겠다. 아무튼 이 책을 요약하면서 정리하고자 한다. 이 책은 정말 강력 추천하며 자바스크립트를 제대로 학습하기 위한 필수 소장서이다.

책구입 : http://tinyurl.com/7ejd4rs
출판사 책소개 : http://blog.insightbook.co.kr/245


자바스크립트 코딩기법과 핵심패턴 제 3장 리터럴과 생성자 정리

이 장에서 중요한 것은 생성자 사용을 자제하고 리터럴 표기법을 사용하라는 것임!


 

  • 리터럴 표기법이 생성자 함수 사용보다 더 간결하고 짧다.
  • 리터럴 표기법을 사용하면 유효범위 판별 작업이 발생하지 않는다.
  • 리터럴 표기법을 사용하는 것이 더 안정적이다. new Object()에 인자가 동적으로 전달되는 경우 예기치 않는 결과가 나올 수 있다. var o = new Object(1);에서 o.constructor === Number는 true가 된다.
  • 생성자는 함수내에 반환문이 없더라도 암묵적으로 this를 반환한다. 이 말은 this대신 다른 것도 반환할 수 있다는 것을 의미한다.
  • 생성자 패턴을 사용하면 논리적 오류가 발생할 수 있다. 자바스크립트에서 생성자는 함수일 뿐이므로 new를 빼먹으면 생성자 내부에 this는 전역 객체를 가리키게 되어 의도치 않는 결과를 초래할 수 있다. 이를 우회하기 위해 다음과 같은 패턴을 사용한다.
    1.if(typeof Array.isArray === "undefined") {
    2.   Array.isArray = function(arg) {
    3.        return Object.prototype.toString.call.(arg) === "[object Array]";
    4.   };
    5.}
  • JSON은 자바스크립트 객체 표기법으로 데이터 전송 형식의 일종으로 배열과 객체 리터럴 표기법의 조합이다.
  • JSON을 다루기 위해 eval()을 사용하는 것은 금지한다.
  • JSON은 가능하면 JSON.parse()와 JSON.stringify()를 사용한다. 이것은 ES 5 부터 추가되었다. 구형 브라우져인 경우 YUI나 jQuery용을 사용하자.
  • 정규 표현식도 리터럴 타입이 안전하다. 생성자 타입(new RegExp())을 사용하는 것은 매칭시킬 패턴을 미리 알 수 없어 런타임에 문자열을 만들어야하는 경우이다.
  • 원시 데이터 타입 레퍼 생성자는 사용하지 말자. 즉 new String("my string"); 이런거 말이다.
  • 원시 데이터에서 "Hello there".split(' ')[0]; 이 동작할 수 있는 것은 일시적으로 객체로 변환하기 때문이다.
  • 에러 객체. 자바스크립트 에러 객체는 Error(), SyntaxError(), TypeError() 3개이다. 이것은 throw문과 사용된다. 중요한 프로퍼티는 name, message이다. 하지만 throw문은 이 에러 객체를 사용하지 않아도 잘 동작한다. throw {name:.., message:..., extra:...}; 형태처럼 사용해도 무방하다.
  • 다음은 권장되는 리터럴과 원시 데이터 타입이다.
    01.var o = {};
    02.var a = [];
    03.var re = /[a-z]/g;
    04.var s = "";
    05.var n = 0;
    06.var b = false;
    07.throw {
    08.  name : "Error",
    09.  message : "uh-oh"
    10.};
    11.또는
    12.throw Error("uh-oh");