JS는 객체 기반의 프로그래밍 언어로 JS를 구성하는 거의 모든 것이 객체
원시 값을 제외한 나머지(함수, 배열, 정규 표현식 등) 모두 객체이다
// 객체는 프로퍼티의 집합
let person = {
name : 'soshin', // 프로퍼티 키 : 프로퍼티 값
age : 27,
}
❗️ 프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해 메서드라고 부른다.
객체는 프로퍼티의 집합이며 프로퍼티는 키와 값으로 구성된다
let person = {
firstName : 'so', // 식별자 네이밍 규칙 준수하는 프로퍼티 키
'last-name' : 'shin' // 식별자 네이밍 규칙 준수하지 않는 프로퍼티 키
// 'last-name' 에서 '...'를 생략한다면 last -(마이너스) name으로 해석한다.
};
[...]
(대괄호)로 묶는다let obj = {};
let key = 'hello';
obj[key] = 'world';
console.log(obj) // {'hello' : 'world'}
Number
타입의 프로퍼티 키는 따옴표는 안 붙지만 문자열로 변환된다let foo = {
0: 1,
1: 2,
2: 3,
};
let person = {
name: 'so',
};
// 1. 마침표 표기법 접근
console.log(person.name); // 'so'
// 2. 대괄호 표기법 접근
console.log(person['name']); // 'so'
존재하지 않는 프로퍼티에 값을 할당하면 동적으로 생성, 추가되며 프로퍼티 값이 할당된다.
let person = {
name : 'so'
};
person.age = 27;
console.log(person); // {name : "so", age : 27}
delete
연산자로 프로퍼티를 삭제한다
// person 객체에서 age 프로퍼티 삭제
delete person.age;
//존재하지 않는 프로퍼티를 삭제하려해도 에러 발생 x
변수 이름과 프로퍼티 키가 동일한 이름일 때 프로퍼티 키 생략 가능
let x = 1, y = 2;
const obj = {x, y};
console.log(obj); // {x : 1, y : 2}
객체 리터럴 내부에서도 계산된 프로퍼티 이름으로 프로퍼티 키 동적 생성 가능
const prefix = 'prop';
let i = 0;
const obj = {
[`${prefix}-${++i}`] : i},
[`${prefix}-${++i}`] : i},
};
console.log(obj); //{prop-1: 1, props-2: 2,}
const obj = {
name ='so',
Hi() {
console.log('Hi' + this.name);
}
};
obj.Hi(); // Hi! so