개발의변화
10장 객체 리터럴 본문
반응형
자바스크립트: 객체 기반 언어
객체타입은 다양한값을 넣을 수 있다.
원시 값은 변경 불가능한 값이지만
객체 값은 변경 가능한 값
프로퍼티 = 키+값
프로퍼티: 객체의 상태를 나타내는 값
메서드: 프로퍼티를 참조하고 조작할 수 있는 값
객체와 함수: 함수로 객체를 생성, 함숮 자체가 객체
객체 생성 : 객체 리터럴, Object 생성자 함수, 생성자 함수, Object.create메서드, 클래스
10.2 객체 리터럴에 ㅢ한 객체 생성
인스턴스: 클래스에 의해 생성되어 메모리에 저장된 실체
var person = {
name: 'Lee',
sayHello: function () {
console.log(\`Hello! My name is ${this.name}.\`);
}
};
console.log(typeof person); // object
console.log(person); // {name: "Lee", sayHello: ƒ}
프로퍼티
객체는 프로퍼티의 집합, 프로퍼티는 키와 값으로 구성
var person = {
// 프로퍼티 키는 name, 프로퍼티 값은 'Lee'
name: 'Lee',
// 프로퍼티 키는 age, 프로퍼티 값은 20
age: 20
};
프로퍼티 키는 "",''문자열로 난타내거 나 식별자 네이밍 규칙을 따르는 이름으로 생략가능
이미 존재하는 프로퍼티 키를 중복선언하면 나중에 선언한 프로퍼티가 먼저 선언한 프로퍼티를 덮어쓴다.
빈 문자열을 프로퍼티 키로 사용해도 에러가 발생X
var,function과 같은 예약어를 프로퍼티 키로 사용해도 에러가 발생X
10.4 메서드
프로퍼티값이 함수일 경우를 메서드라고 부른다.
var circle = {
radius: 5, // ← 프로퍼티
// 원의 지름
getDiameter: function () { // ← 메서드
return 2 * this.radius; // this는 circle을 가리킨다.
}
};
console.log(circle.getDiameter()); // 10
10.5 프로퍼티 접근
마침표표기법: 마침표 프로퍼티 접근 연산자 . 을 사용
대괄호표기법: 대괄호 프로퍼티 접근 연산자를 사용
var person = {
name: 'Lee'
};
// 마침표 표기법에 의한 프로퍼티 접근
console.log(person.name); // Lee
// 대괄호 표기법에 의한 프로퍼티 접근
console.log(person['name']); // Lee
대괄호 프로퍼티 접근 연산자 내부에 지정하느 프로퍼티 키는 반드시 따옴표로 감싼 문자열
객체에 존재하지 않느 프로퍼티에 접근하면 Undefined => Error가 발생하지 않는다.
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.age = 20;
// person 객체에 age 프로퍼티가 존재한다.
// 따라서 delete 연산자로 age 프로퍼티를 삭제할 수 있다.
delete person.age;
// person 객체에 address 프로퍼티가 존재하지 않는다.
// 따라서 delete 연산자로 address 프로퍼티를 삭제할 수 없다. 이때 에러가 발생하지 않는다.
delete person.address;
console.log(person); // {name: "Lee"}
ES6에서 추가된 객체 리터럴 확장기능
// ES6
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 obj = {
name: 'Lee',
// 메서드 축약 표현
sayHi() {
console.log('Hi! ' + this.name);
}
};
obj.sayHi(); // Hi! Lee
반응형