자바스크립트는 프로토타입 기반 객체지향 언어로서 클래스 기반 객체지향 언어(자바, C++)와는 달리 다양한 객체 생성 방법을 지원한다.
- 객체 리터럴
- Object 생성자 함수
- 생성자 함수
- Object.create 메서드
- 클래스(ES6)
var person = {
name: 'Lee',
sayHello: function () {
console.log('Hi! My name is ' + this.name);
}
};
console.log(typeof person); // object
console.log(person); // {name: "Lee", sayHello: ƒ}
객체는 프로퍼티의 집합이다.
프로퍼티는 키와 값으로 구성된다.
- 프로퍼티 키(key) : 빈 문자열을 포함하는 모든 문자열 또는 symbol 값
- 프로퍼티 값(value) : 자바스크립트에서 사용할 수 있는 모든 값
var obj = {};
var key = 'hello';
//프로퍼티 키 동적 생성. 문자열을 대괄호로 묶어 생성
obj[key] = 'world';
//나중에 선언한 프로퍼티가 덮어쓴다.
var foo = {
name : 'Lee',
name : 'Kim'
}
console.log(foo); // {name : 'Kim'}
var circle = {
radius : 5,
//메서드
getDiameter : function () {
return 2*this.raius; //this는 circle을 가리킨다.
}
}
console.log(circle.getDiameter());//10
마침표 프로퍼티 접근 연산자(.)를 사용하는 마침표 표기법
대괄호 프로퍼티 접근 연산자([…])를 사용하는 대괄호 표기법
대괄호 표기법 사용시에는 키는 반드시 따옴표로 감싼 문자열이어야 한다.
프로퍼티 키가 식별자 네이밍 규칙을 준수하지 않는 이름이면 반드시 대괄호 표기법을 사용해야 한다. (단, 키가 숫자일 경우는 따옴표 생략 가능)
var person = {
'last-name' : 'Lee',
1:10
};
person.'last-name'; //Syntanx Error
person.last-name; // error (브라우저와 node.js환경에서 다르게 에러)
person[last-name]; // ReferenceError : last is not defined
person['last-name']; // Lee
person.1; //SyntaxError
person.'1'; //SyntaxError
person[1]; //10
person['1']; //10
var person = {
name : 'Lee'
};
person.name = 'Kim';
console.log(person); //{name:"Kim"};
var person = {
name : 'Lee'
};
person.age = 20;
console.log(person); //{name:"Lee", age:20};
var person = {
name : 'Lee'
};
person.age = 20;
delete person.age;
delete person.address;// 없는 프로퍼티이므로 무시
console.log(person); //{name : 'Lee'}
let x = 1, y= 2;
const obj = { x, y };
console.log(obj); //{x:1, y:2}
//ES5
var prefix = 'prop';
var i = 0;
var obj = {};
obj[prefix+'-'+ ++i] = i;
obj[prefix+'-'+ ++i] = i;
obj[prefix+'-'+ ++i] = i;
console.log(obj); //{prop-1 : 1, prop-2 : 2, prop-3: 3};
//ES6
const obj2 = {
[`${prefix}-${++i}`]:i,
[`${prefix}-${++i}`]:i,
[`${prefix}-${++i}`]:i,
}
console.log(obj2); //{prop-1 : 1, prop-2 : 2, prop-3: 3};
const obj = {
name : 'Lee',
sayHi() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi();