JS에서 객체는 왕이다. 만약 객체(object)를 이해한다면 이는 곧 JS를 이해한 것이다.
JS에서 대부분의 모든 것
은 object이다.
new
키워드로 생성 시)new
키워드로 생성 시)new
키워드로 생성 시)모든 JS 값과 요소들 역시 객체이다.
--
원시 값(primitive value)은 속성이나 메서드가 없는 값이다.
원시 자료형(primitive data type은 원시 값이 없는 데이터다.
JS는 5가지 유형의 기본 데이터 유형을 정의한다.
string
number
boolean
null
undefined
원시 값들은 변형이 불가하다(하드코딩 되어 변경될 수 없다).
만약 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` 모두 변경된다.