Chapter 10 객체 리터럴
자바스크립트는 객체기반의 프로그래밍 언어.
원시값을 제외한 나머지(함수,배열,정규식)등은 모두객체.
var 객체 = {
name : "samuel"
}
var counter - {
num:0,
increase:function(){
this.num++; // this 는 num을 지칭.
}
}
메서드
increase:function(){
this.num++; // this 는 num을 지칭.
}
객체와 함수
자바스크립트에서 객체는 함수와 밀접한 관계.
함수로 객체를 생성하기도 하고, 함수자체가 객체이기도 함. 함수와 객체를 분리해서 생각할 수 없는 개념.
var person = {
name: "samuel",
sayHi: function () {
console.log("hi " + this.name);
}
}
person.sayHi();
console.log(typeof person);
console.log(person)
프로퍼티
객체는 프로퍼티의 집합이며, 프로퍼티는 키와 값으로 구성.
var person = {
name: "samuel", //프로퍼티의 key는 name / value는 "samuel"
age : 28; // key 는 age / value는 28
}
var person = {
firstName: 'Ung-mo',
last-name: 'Lee' // SyntaxError: Unexpected token '-'
};
메서드
프로퍼티 값이 함수일 경우 일반함수와 구분하기위해 메서드라 칭함. 메서드는 객체에 묶여있는 함수.
var circle={
radius:5,
GetDiameter: function(){
return this.radius*2;
}
}
console.log(circle.GetDiameter());
var person = {
name: 'Lee'
};
// 마침표 표기법에 의한 프로퍼티 접근
console.log(person.name); // Lee
// 대괄호 표기법에 의한 프로퍼티 접근
console.log(person['name']); // Lee
console.log(person[name]); // 식별자로 해석 // ReferenceError: name is not defined
var person = {
'last-name': 'Lee',
1: 10
};
person.'last-name'; // -> SyntaxError: Unexpected string
person.last-name; // -> 브라우저 환경: NaN
// -> Node.js 환경: ReferenceError: name is not defined
person[last-name]; // -> ReferenceError: last is not defined
person['last-name']; // -> Lee
// 프로퍼티 키가 숫자로 이뤄진 문자열인 경우 따옴표를 생략할 수 있다.
person.1; // -> SyntaxError: Unexpected number
person.'1'; // -> SyntaxError: Unexpected string
person[1]; // -> 10 : person[1] -> person['1']
person['1']; // -> 10
프로퍼티 값 갱신
var person = { name: 'Lee' }; // person 객체에 name 프로퍼티가 존재하므로 name 프로퍼티의 값이 갱신된다. person.name = 'Kim'; console.log(person); // {name: "Kim"}
프로퍼티의 동적생성
var person = { name: 'Lee' }; // person 객체에는 age 프로퍼티가 존재하지 않는다. // 따라서 person 객체에 age 프로퍼티가 동적으로 생성되고 값이 할당된다. person.age = 20; console.log(person); // {name: "Lee", age: 20}
const person = {
name : 'samuel'
}
person.name = '태진';
person.age =28;
console.log(person.age); //28
console.log(person.name); //태진
const person = {
name : 'samuel'
}
Object.freeze(person);
person.name = '태진';
person.age =28;
console.log(person.age);
console.log(person.name);
// ES6
let x = 1, y = 2;
// 프로퍼티 축약 표현
const obj = { x, y };
console.log(obj); // {x: 1, y: 2}
// ES6
const prefix = 'prop';
let i = 0;
// 객체 리터럴 내부에서 계산된 프로퍼티 이름으로 프로퍼티 키 동적 생성
const obj = {
[`${prefix}-${++i}`]: i,
[`${prefix}-${++i}`]: i,
[`${prefix}-${++i}`]: i
};
console.log(obj); // {prop-1: 1, prop-2: 2, prop-3: 3}
// ES5
var obj = {
name: 'Lee',
sayHi: function() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi(); // Hi! Lee
// ES6
const obj = {
name: 'Lee',
// 메서드 축약 표현
sayHi() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi(); // Hi! Lee