You don't know JS ch1~3 요약

CH1

자바스크립트에는 7가지의 내장 타입이 있다.

  1. null
  2. undefined
  3. boolean
  4. number
  5. string
  6. object
  7. symbol
  • typeof null 은 'object'다. typeof 연산자를 설계할 때 null을 체크하지 않아 일어나는 버그다.
  • function은 object의 하위타입이다. 프로퍼티를 둘 수 있다.
  • array도 object의 하위타입이다. length 프로퍼티를 자동으로 갖고있다.

JS는 변수에 타입을 부여하지 않는다. 값에 타입이 있는 것이다.

  • undefined VS undeclared
  • undeclared 의 타입은 undefined로 나온다. 그래서 이를 이용해서 referenceError를 방지할 수 있다.

CH2

  1. 배열

    배열자체도 하나의 객체여서 키 문자열을 추가할 수있다!(하지만 하지말자)

  2. 문자열

    문자열은 유사 배열이다 하지만 문자열은 불변값이다. 배열처럼 다루다가 큰코다친다.

  3. 숫자

    JS의 숫자타입은 int, float모두 아우른다.

  4. 특수값

    undefine, null, NaN, 무한대(Infinity), -0 , +0

  5. 레퍼런스

    • 값의 타입만으로 값-복사, 레퍼런스-복사 가이루어진다.
    • 단순값(null, undefined, string, number, boolean)은 값-복사 방식으로 할당/전달된다.
    var a = [1,2,3];
    var b = a;
    • a와 b는 [1,2,3]을 소유하는 것이 아니라 이 값을 동등하게 참조한다.
    • 함수에 인자로 넘겨줄 때 역시 레퍼런스 사본이 할당된다.

CH3

3.0 네이티브

자바스크립트는 네이티브를 제공한다 (원시값을 감싸는 객체레퍼)

3.1내부[[class]]

객체는 모두 내부프로퍼티([[class]]: 내부분류법의 일부)를 가져서 Ocject.prototype.toString() 메서드를 이용해 객체의 정체를 알 수 있다.

3.2 래퍼 박싱하기

자바스크립트는 원시값을 알아서 박싱한다 (오브젝트로 감싼다) 그래서 네이티브의 프로퍼티나 메서드를 사용할 수 있다. 프로퍼티나 메서드를 사용해야 한다고 해서 미리 객체로 만들어주면 오히려 성능에 안좋다!

특히 bool값을 래퍼로 감싸서 쓸 경우 객체는 truthy하기 때문에 원하는 대로 동작 하지 않을 수 있다.

그럼에도 수동으로 래핑을 할 때는 Object() 함수를 이용한다.

3.3 언박싱

ValueOf() 메서드로 원시값을 추출한다. 자바스크립트가 암시적인 언박싱을 하기도 한다.

3.4 네이티브, 나는 생성자다

  • Array생성자 인자로 숫자를 1개만 받으면 배열의 크기를 미리 정한다. → 값은 가지지않지만 길이는 3인 헤괴망측한 배열이 탄생
  • 이러한 배열을 join했을 때와 map했을때 둘은 다른방식으로 동작한다는 것을 알 수있다.
  • ㄹㅇ[ undefine, undefine, undefine ] 을 생성할 때 Array.apply(null , {length :3 }) 과 같이 할 수 있다. → 얘가 undefined X 3 얘보단 낫다.
  • Object() , Function(), RegExp()를 사용하면 인자나내용을 동적으로 정의할수있다.(쓰지마.)
  • Date(), Error()은 많이 쓰인다.
  • Symbol은 특수 내부 프로퍼티를 생성할 때 _property같이 만드는 것 대신에 심벌을 많이 쓸것으로 보인다.
  • 네이티브생성자는 각자의 .prototype 객체를 가진다. 문자열값을 변경하는 메서드는 없다.
  • Function.prototype, Array.prototype은 빈함수 빈배열이기 때문에 디폴트값으로 사용할 수 있다. 이는 []나, ()⇒로 하는 것보다 메모리를 아낄 수 있다.

좋은 웹페이지 즐겨찾기