JS에서 객체는 왕이다. 만약 객체(object)를 이해한다면 이는 곧 JS를 이해한 것이다.
JS에서 대부분의 모든 것은 object이다.
new키워드로 생성 시)new키워드로 생성 시)new키워드로 생성 시)모든 JS 값과 요소들 역시 객체이다.
--
원시 값(primitive value)은 속성이나 메서드가 없는 값이다.
원시 자료형(primitive data type은 원시 값이 없는 데이터다.
JS는 5가지 유형의 기본 데이터 유형을 정의한다.
stringnumberbooleannullundefined원시 값들은 변형이 불가하다(하드코딩 되어 변경될 수 없다).
만약 x=3.14 라면, 우리는
x의 값을 변경할 수 있다. 그러나 3.14의 값을 변경할 수는 없다.
| Value | Type | Comment |
|---|---|---|
| "Hello" | string | "Hello" is always "Hello" |
| 3.14 | number | 3.14 is always 3.14 |
| true | boolean | true is always true |
| false | boolean | false is always false |
| null | null (object) | null is always null |
| undefined | undefined | undefined is always undefined |
JS 변수는 단일 값을 포함 할수 있고, 여러 값을 포함 할 수 도 있다.
객체 또한 동일하다.
Object는 name:value 가 한 쌍이다.
즉 JS의 Object는 명명된 값의 모음이다.
아래 형식이 일반적이다.const person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
JS 객체에서 명명된 값을 속성이라고 한다.
| Property | Value |
|---|---|
| firstName | John |
| lastName | Doe |
| age | 50 |
| eyeColor | blue |
이름 값 한 쌍으로 작성된 객체는 다음과 비슷하다.
메서드는 개체에 대해 수행할 수 있는 작업(actions)이다.
객체 속성은 원시 값, 기타 객체 및 함수가 될 수 있다.
객체 메서드는 함수 정의를 포함하는 객체 속성이다.
| Property | Value |
|---|---|
| firstName | John |
| lastName | Doe |
| age | 50 |
| eyeColor | blue |
| fullName | function() {return this.firstName + " " + this.lastName;} |
JS를 사용하여 고유한 객체를 정의하고 만들 수 있다.
새 개체를 만드는 방법에는 여러 가지가 있다.
이것은 JS 객체를 생성하는 가장 쉬운 방법이다.
객체 리터럴을 사용하면 하나의 명령문에서 객체를 정의하고 생성할 수 있다.
객체 리터럴은 중괄호 {} 안에 있는 이름:값 쌍(예: age:50)의 목록이다.
다음 예시에서는 4개의 속성이 있는 새 JS 객체를 만든다.
const person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}; // 공백이나 줄 바꿈은 중요하지 않다. // 객체 정의는 여러 줄 사용을 허용한다. const person = { firstName: "John", lastName: "Doe", age: 50, eyeColor: "blue" };
다음 예시는 빈 객체를 만든 다음, 4개 속성을 추가하였다.
const person = {}; person.firstName = "John"; person.lastName = "Doe"; person.age = 50; person.eyeColor = "blue";
다음 예시는
new Object()키워드를 사용하여 새로운 JS Object를 생성하고, 4개의 속성을 추가한다.const person = new Object(); person.firstName = "John"; person.lastName = "Doe"; person.age = 50; person.eyeColor = "blue";
상위 3가지 예시는 모두 동일하다. 그러나 구지
new Object()키워드를 사용할 필요가 없다. 가독성, 단순성 및 실행 속도를 위해객체 리터럴방법을 사용하자.
객체는 변경 가능하다. 값으로 정의되는 것이 아닌 주소 참조로 처리되기 때문이다.
person이 객체인 경우, 다음 명령문은 person의 복사본을 생성하지 않는다.
const x = person; // Will not create a copy of person.
객체 x는
person의 복사본이 아닌 person이다.x와person모두 같은 객체이다.const person = { firstName:"John", lastName:"Doe", age:50, eyeColor:"blue" }
const x = person;
x.age = 10; // Will change both x.age and person.age
`x.age`와 `person.age` 모두 변경된다.