190708-TIL

190708-TIL

Today I Learned

TEST

  • Wrapper Object

    1
    2
    3
    4
    'string'.length; // 6
    const s = 'super'
    String.prototype.sayHi() = () => { console.log('Hi') };
    s.sayHi(); // 'Hi

    문자열을 객체처럼 사용할 경우 JavaScript 엔진이 순간 String 생성자 함수로 wrapping 한다.

  • Property Key

    • Property Key 동적 생성
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var obj = {};
    var key = 'hello';

    // ES5: 프로퍼티 키 동적 생성
    obj[key] = 'world';
    // ES6: 프로퍼티 키 동적 생성
    // var obj = { [key]: 'world' };

    console.log(obj); // {hello: "world"}
    • Property Key는 문자열이나 symbol 값 이외의 값을 사용하면 암묵적 타입 변환을 통해 문자열이 된다. 예를 들어, 프로퍼티 키로 숫자 리터럴을 사용하면 따옴표는 붙지 않지만 내부적으로는 문자열로 변환된다.
    • Property Key로 객체를 사용해도 error가 나지 않고 들어감. 배열도 마찬가지
      Property Key
    • 객체는 [object Object]라는 String으로 변환된다. obj[string]이 되어야하기 때문에 [] 내부는 문자열로 강제 형변환된다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const a = {};
    const b = { key: 'b' };
    const c = { key: 'c' };

    // 두 객체 모두 Property key로 쓰일 때 문자열 [object Object]로 변환되어 같은 key가 된다.
    a[b] = 123;
    a[c] = 456;

    console.log(a[b]);

    Object property key

    • Property Key를 중복 선언하면 나중에 선언한 Property가 이전 것을 덮어씀
  • call, apply method는 함수에 this를 전달하고 호출하지만 bind는 this를 전달한 함수를 return한다.

  • Function literal과 Function declaration statement의 차이

    • 함수 이름이 있는 함수 선언문은 자바스크립트 엔진이 함수명과 동일한 식별자를 생성하고 생성한 함수 객체를 할당한다.
    • 함수 이름이 필수가 아닌 함수 리터럴은 그저 평가되어 함수 객체를 생성한다. 이를 괄호로 감싸면 에러 없이 함수 객체가 된다.
      1
      2
      3
      4
      // 즉시 실행 함수로 함수 리터럴을 사용하는 경우
      (function () {
      ...
      })()
# TIL
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×