-
객체(object)
- 의미를 가지는 정렬되지 않은 집합
- 이름(name), 값(value)으로 구성된 프로퍼티(property)
- 프로퍼티의 값으로 함수가 올 수도 있는데, 이러한 프로퍼티를 메소드(method)라고 한다.
객체의 예
강아지
프로퍼티(propoerty)
dog.name = "댕댕이" dog.age = 5 dog.weight = 6 ....
강아지 객체는 모두 위와 같은 프로퍼티를 가지지만, 각 프로퍼티의 값은 전부 다를 것이다.
let dog = { name: "댕댕이", age: 5, weight: 6, };
- 객체는 키, 값으로 이루어짐
- 키, 값 사이는 콜론(:)으로 구분
- 중괄호를 이용해 객체 생성
- 키-값은 쉼표(comma)로 구분
객체의 메소드 참조
객체이름.메소드이름()
var person = { name: "홍길동", birthday: "030219", pId: "1234567", fullId: function() { return this.birthday + this.pId; } }; // person.fullId() // 0302191234567 // person.fullId; // function () { return this.birthday + this.pId; }
메소드를 참조할 때 메소드 이름 뒤에 괄호()를 붙이지 않으면, 메소드가 아닌 프로퍼티 그 자체를 참조하게 된다. 따라서 괄호를 사용하지 않고 프로퍼티 그 자체를 참조하게 되면 해당 메소드의 정의 그 자체가 반환된다.
객체의 생성
Dot notation
dog.name; // '댕댕이' dog.age; // 5 추가; dog.type = "Basset Hound"; dog = { name: "댕댕이", age: 5, weight: 6, type: "Basset Hound" }; 삭제; delete dog.type; dog = { name: "댕댕이", age: 5, weight: 6 };
Bracket notation
dog["name"]; // '댕댕이' dog["age"]; // 5 추가; dog["type"] = "Basset Hound"; dog = { name: "댕댕이", age: 5, weight: 6, type: "Basset Hound" }; 삭제; delete dog["type"]; dog = { name: "댕댕이", age: 5, weight: 6 };
생성자 함수(constructor function)
var day = new Date(); // new 연산자를 사용하여 Date 타입의 객체를 생성함 document.write("올해는 " + day.getFullYear() + "년입니다.");
Object.create() 메소드
var obj = Object.create(null, { // null 프로토타입을 사용하여 새로운 객체를 만들고 x: { value: 100, enumerable: true }, // x좌표를 나타내는 열거할 수 있는 프로퍼티와 y: { value: 200, enumerable: true } // y좌표를 나타내는 열거할 수 있는 프로퍼티를 추가함 }); obj // {x: 100, y:200} obj.x; // x좌표 obj.y; // y좌표 Object.getPrototypeOf(obj); // 객체의 프로토타입을 반환해 줌
객체 프로퍼티의 순회
- for/in문
- Object.keys() : 해당 객체가 가진 고유 프로퍼티 중에 열거할 수 있는 프로퍼티의 이름을 배열에 담아 반환
- Object.getOwnPropertyNames(): 해당 객체가 가진 모든 고유 프로퍼티의 이름을 배열에 담아 반환객체 간의 비교
별개의 두 객체는 프로퍼티의 값이 모두 같아도, 같다고 말할 수 없다.- 두 객체는 별개의 객체이므로, 동등(==), 일치(==) 연산자로 비교해도 모두 false