객체 리터럴이란?
객체를 정의하는 방법이 2가지가 있습니다.
1. new 키워드로 생성자 함수로 객체 생성.
2. 객체 리터럴로 직접 객체의 속성과 값을 문자로 적는 것.
여기서 객체 리터럴이란?
// 객체리터럴
const obj = {
prop1 : "첫번째 속성값",
prop2 : "두번째 속성값",
prop3 : "세번째 속성값",
}
위와 같이 객체를 정의할 때 직접 속성명과 속성값을 하나하나 문자로 적어서 객체를 정의하는 것이 객체 리터럴 방식입니다.
ES6에서는 이 객체 리터럴이 좀 더 편한게 향상된 것이 있다고 해서 "향상된 객체리터럴"으로 자주 설명되곤 합니다.
지금 부터 그 향상된 객체리터럴 표기법을 알아봅시다.
크게 3가지 정도가 있습니다.
1. 속성명과 속성값의 변수명이 같다면, 하나만 기입가능.
2. 메서드 속성을 정의할 때 function() 키워드 생략가능.
3. 동적 속성명을 바로 정의가능.
그냥 이렇게만 본다면 모르시겠죠. 하나씩 코드를 보면서 설명해보겠습니다.
1. 속성명과 속성값의 변수명이 같다면, 하나만 기입가능.
// ES5에서는 이렇게 써야합니다.
var myName = 'cucuhama';
var obj = {
myOld : '23',
myLocation : 'GangNam',
myName : myName // 여기서 myName이라는 속성명(key값)의 값(value값)으로 변수 myName을 지정했습니다.
}
위와 같이 myName : myName 처럼 myName이 두 번 중복되고 있죠. 이런 현상을 없애기 위해서 ES6 부터는 만약 저렇게 속성명과 그 값의 변수명이 서로같다면, myName 한번만 적어도 됩니다.
const myName = 'cucuhama';
const obj = {
myName, // 이렇게 한번만 적어도 myName : myName 처럼 동작합니다.
myOld : '23',
}
2. 메서드 속성을 정의할 때 function() 키워드 생략가능.
// ES5 기존 문법
var obj = {
prop1 : "something",
prop1 : "anything",
method1 : function(){ // 반드시 메서드일 경우 function() 키워드 필요
console.log("이것은 메소드입니다");
},
};
더 이상 function 키워드를 쓰지 않아도 됩니다. 이렇게 말이죠.
const obj = {
porp1 : "somethind",
prop2 : "else",
method1() { // 바로 함수명을 적으면 됩니다.
console.log("이것은 메서드입니다.");
}
};
3. 동적 속성명을 바로 정의가능.
동적 속성명이란, 속성명으로 변수를 사용해서 동적으로 속성명을 정의할 수 있도록 하는 것 입니다.
// ES5 에서 동적 속성명 하기
// 우선 먼저 객체를 정의하고
var obj = {
prop1 : "lulu",
prop2 : "lala",
method1 : function(){
console.log("룰루 랄라");
},
};
// 객체를 먼저 생성하고 그 다음에 동적 속성명을 정의한다.
var value = "prop3";
obj[value] = '동적이군'; // obj에 prop3이란 속성이 생기고 값으로 "동적이군"이 들어간다.
하지만 ES6 부터는 위와는 다르게 객체를 정의할 때 같이 동적속성명을 정의할 수 있습니다.
let value = "prop3"; // 동적으로 정의할 속성명을 변수 "value"에다가 저장합니다.
const obj = {
prop1 : "룰루",
prop2 : "랄라",
hoho() {
console.log("호호 함수");
},
[value] : '동적이군', // 이렇게 바로 객체리터럴에서 동적으로 정의할 수 있습니다.
};
'javaScript > 초급(문법 위주)' 카테고리의 다른 글
자바스크립트 프로토타입 Prototype (= __proto__) 2편 (0) | 2020.10.20 |
---|---|
자바스크립트 프로토타입 (JavaScript Prototype) 1편 (개념위주) (1) | 2020.10.15 |
콜백 함수와 익명 함수에 관하여 (1) | 2020.10.14 |
Promise 자바스크립트 프로미스 비동기 통신 (0) | 2020.10.12 |
식별자와 변수 (0) | 2020.06.22 |