객체 Object
- 원시타입을 제외한 모든 것은 객체이다.
- 키(key)와 값(value)로 구성된 속성(property)의 집합이다.
- 데이터를 한 곳에 모으고 구조화하는데 유용하다.
1. 객체의 속성(Property)과 메서드
- 속성(property) : 데이터를 의미한다.
- key(속성명)와 value(속성값)으로 표현
- key는 중복선언시 이전에 있던 프로퍼티를 덮어쓴다.
- 메서드(method) : 데이터를 참조하고 조작할 수 있는 동작을 의미한다.
- 프로퍼티에 저장되어 있는 값의 타입이 함수이다!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
var obj = { key1: "value1", key2: "value2", key1: "value3" };
console.log(obj.key1);
var obj2 = { key: function() { console.log("객체의 값이 함수면 메서드이다."); } };
obj2.key();
|
2. 객체 : 참조 타입
- 변수 : 일정한 메모리에 값을 저장
- 객체 : 한 덩어리로 메모리 영역에 저장
- 변수 = 객체 타입
- 객체 타입을 변수에 대입(저장)
- 변수는 객체가 저장되어 있는 메모리 영역의 참조(위치 정보)가 저장된다.
3. 객체 생성법
- 리터럴방식 {}
- 생성자 함수(사용자 정의 함수)
=> es6이전에 많이 사용 되었음
- 생성자 new Object()
=> 비추
1. 리터럴방식
- 가장 일반적인 객체 생성 방식
- 가독성이 좋고, 오류발생이 적다.
1 2 3 4 5 6 7
| var obj = {};
obj.name = "song"; obj.age = "20";
console.log(typeof obj); console.log(obj);
|
2. 생성자 함수 (사용자 정의 함수)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
var Person = function(name, age) { this.name = name; this._age = name; this.say = function() { console.log("my name is" + this.name); }; };
var p = new Person("song", 20);
p.say();
|
3. 생성자 new Object
- 가독성이 떨어지고 인자로 원시적 타입등이 들어가는 경우 오류가 발생하기 쉽다. -> 비추!!!!
1 2 3 4 5 6 7 8 9
| var obj = new Object();
console.log(obj.constructor === Object);
obj.name = "song"; obj.age = 20;
console.log(obj);
|
**_constroctor_**은 해당 Object가 어떤 상태인지 알려준다.
3. 객체 속성을 추가, 갱신, 삭제, 탐색
- 추가, 갱신, 삭제 delete
1 2 3 4 5 6 7 8 9 10 11
| var obj = {};
obj.name = "song";
obj.name = "eunji";
console.log(obj);
delete obj.name;
console.log(obj);
|
- 탐색
- 마침표 표기법 obj.name
- 대괄호 표기법 obj[‘name’]
- for-in문
- for-of문 (ES6)
- 객체는 순서가 보장되지 않는다 -> for in문 안쓰는 것이 좋다
- ES6에서 이 점을 보완하여 for of문이 나왔다.
for-in, for-of는 객체에 포함된 모든 프로퍼티에 대해 루프를 실행
- for-in(객체의 프로퍼티 순회)
- for-of(배열의 요소를 순회)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| var person = { name: "song", age: 20 };
var key;
for (key in person) { console.log(key + ":" + person[key]); }
for (const value of person) { console.log(value); }
|