객체
는 0개 이상의프로퍼티
로 구성된 집합체이며, 프로퍼티는키(key)
와값(value)
으로 구성된다.
자바스크립트에서 사용할 수 있는 모든 값은 프로퍼티 값이 될 수 있다. 따라서 함수도 프로퍼티 값으로 사용할 수 있다. 프로퍼티 값이
함수
일 경우, 일반 함수와 구분하기 위해서메서드(method)
라 부른다.
let user = {
name: 'Kim', // 프로퍼티
age: 18 // 프로퍼티
}; // age - key, 20 - value
let counter = {
num: 0, // 프로퍼티
increase: function() {
this.num++;
} //메서드
};
프로퍼티
: 객체의 상채를 나타내는값(data)
메서드
: 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는동작(behavior)
객체 생성 방법 중에서 가장 일반적이고 간단한 방법은
객체 리터럴
을 사용하는 방법이다.
리터럴(literal)
은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용하여 값을 생성하는 표기법을 말한다.객체 리터럴
은 객체를 생성하기 위한 표기법이다.
객체 리터럴
은중괄호{}
내에 0개 이상의 프로퍼티를 정의한다.
let user = {
name: 'Kim',
SayHello: function() {
console.log(`Hello! My name is ${this.name}.`);
}
};
객체
는프로퍼티
의 집합이며,프로퍼티
는키
와값
으로 구분된다.
프로퍼티
를 나열할 때는쉼표(,)
로 구분한다.
let user = {
name: 'Kim', // 프로퍼티 키는 name, 프로퍼티 값은 'Kim'
age: 18 // 프로퍼티 키는 age, 프로퍼티 값은 18
};
프로퍼티 키
: 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
프로퍼티 값
: 자바스크립트에서 사용할 수 있는 모든 값
식별자 네이밍 규칙을 따르지 않는 이름에는 반드시 따옴표를 사용해야 한다.
let name = {
firstName = 'John', // 식별자 네이밍 규칙을 준수함
'last-name': 'Smith' // 식별자 네이밍 규칙을 준수하지 않음
};
console.log(name); //{firstName: "John", last-name: "Smith"}
let name = {
firstName: 'John',
last-name: 'Smith' // 오류 발생
};
프로퍼티 키에 문자열이나 심벌 값 이외의 값을 사용하면 암묵적 타입 변환을 통해
문자열
이 된다.프로퍼티 키
로숫자 리터럴
을 사용하면 따옴표는 붙지 않지만 내부적으로는문자열로 변환
된다.
let anything = {
0: 1,
1: 2,
2: 3
};
console.log(anything); // {0:1, 1:2, 2:3}
이미 존재하는 프로퍼티 키를
중복 선언
하면 나중에 선언한 프로퍼티 가 먼저 선언한 프로퍼티를 덮어 쓴다. 이때 에러가 발생하진 않는다.
let user = {
name: 'John',
name: 'Jack'
};
console.log(user); // {name: 'Jack'}
자바스크립트에서 사용할 수 있는 모든 값은 프로퍼티 값이 될 수 있다. 따라서 함수도 프로퍼티 값으로 사용할 수 있다. 프로퍼티 값이
함수
일 경우, 일반 함수와 구분하기 위해서메서드(method)
라 부른다.
즉,
메서드(method)
는 객체에 묶여있는 함수를 의미한다.
let user = {
name: 'Kim', // 프로퍼티
SayHello: function() { // 메서드
console.log(`Hello! My name is ${this.name}.`); // this -> user
}
};
console.log(user.SayHello()); // 'Helllo! My name is Kim.'
let user = {
name: 'John',
age: 21
};
마침표 프로퍼티 접근 연산자(.)
를 사용하는마침표 표기법
console.log(user.name); // 'John'
console.log(user.age); // 21
대괄호 프로퍼티 접근 연산자 ([])
를 사용하는대괄호 표기법
console.log(user['name']); // 'John'
console.log(user['age']); // 21
대괄호 프로퍼티
접근 연산자 내부에 지정하는 프로퍼티 키는 반드시따옴표로 감싼 문자열
이어야 한다.
let student = {
name: 'Kim',
age: 17
};
console.log(student[name]); // Reference Error: name is not defined
이미 존재하는 프로퍼티에 값을 할달하면 프로퍼티 값이 갱신된다.
let user = {name: 'John'};
user.name = 'Micheal';
console.log(user); // {name: 'Micheal'}
존재하지 않는 프로퍼티에 값을 할당하면 프로퍼티가 동적으로 생성되어 추가되고 값이 할당된다.
let user = {name: 'John'};
user.age = 21;
console.log(user); // {name: 'John', age: 21}
delete
연산자는 객체의 프로퍼티를 삭제한다.
let user = {name: 'John', age: 21};
delete user.age;
console.log(user); // {name: 'John'}