ES6알아보기 09 - Objects

ES6알아보기 09 - Objects

2018, Jun 22    

오늘은 ES6 부터 Objects 를 다룰 때 바뀐 점들을 소개하려고 합니다.

축약형 표기 - Shorthand Notation

설명없이 바로 ES6이전과 ES6의 표기법을 비교해 보겠습니다.

var word = 'hello world';
var num = 10;

// ES6 이전의 Object 표기법
var obj = {
  word: word,
  num: num,
  print: function print() {
    console.log(this.word);
  }
}

// ES6 의 표기법
var objEs6 = {
  word,
  num,
  print() {
    console.log(this.word);
  }
}

차이점이 바로 보이실거라 생각됩니다. 변수병이 object의 property 명과 동일할 경우에는 property 명: 변수명 으로 선언할 필요없이 하나로 묶어서 표기할 수 있습니다. 물론 함수의 경우에도 동일합니다. 변수명과 프로퍼티 명이 다를 경우에는 나눠서 표기해 주어야 합니다.


연산가능한 property 명 - Computed Property

제가 Object 관련해서 매우 유용하다고 느낀 점이 이부분 입니다. ES6 에서는 Object의 프로퍼티 명을 동적으로 선언할 수 있습니다.

var word = 'world';

var objEx1 = {
  ['hello' + word]: 'hello',
}
console.log(objEx1.helloworld); // hello

var objEx2 = {
  ['hello ' + word]: 'hello',
}
console.log(objEx2.hello world); // Syntax Error 발생
console.log(objEx2['hello world']); // hello

위의 예와 같이 property 명을 고정으로 표기하는 것이 아닌 [ ] 대괄호 안에서 동적으로 선언할 수 있습니다. 또한 objEx1 과 objEx2 와의 차이점에서도 살펴볼 수 있듯이 프로퍼티명 안에 공백도 들어갈 수 있습니다. 하지만 공백이 들어간 프로퍼티를 참조할 경우 역시 [ ] 대괄호를 통해서만 불러올 수 있습니다. 가능하기는 하지만 결코 좋은 방법은 아니기 때문에 되도록 공백을 넣거나 하는 것은 좋지 않겠네요.


동일한 Property 명 선언가능

var obj = {
  x: 1,
  x: 2,
  x: 3
}
console.log(obj.x); // 3

ES6이전의 경우에는 동일한 이름의 프로퍼티가 있을 경우 syntax error 가 발생했지만 ES6의 경우는 마지막에 선언된 값으로 Overwrite 됩니다.