객체

사용자 한 명을 설명한다고 가정해봅시다: 이름, 이메일, 나이, 로그인 여부. 이들을 네 개의 별도 변수로 분산시킬 수 있지만, 이들은 서로 관련이 있고, 분리해두면 "사용자"를 의미할 때마다 네 가지를 계속 전달해야 합니다. 객체를 사용하면 모든 것을 하나의 값으로 모을 수 있으며, 각 조각은 조회할 수 있는 이름을 가집니다. 취급할 대부분의 데이터(사용자, 제품, 장바구니)는 정확히 이런 형태로 도착합니다.
객체 만들기
**객체**는 중괄호로 작성된 명명된 값의 모음입니다. 내부에는 쉼표로 구분된 key: value 쌍을 나열합니다. 키는 이름이고 값은 그것이 보유한 것입니다:
const user = {
name: "민지",
age: 27,
};
console.log(user.name); // 민지값을 다시 읽을 때는 점과 키를 사용합니다: user.name. 이를 점 표기법이라고 하며, 대부분의 경우 이것을 사용하게 됩니다. 왼쪽에 키, 오른쪽에 저장된 값.
값을 읽는 두 번째 방법이 있는데, 문자열로 된 키를 가진 대괄호를 사용합니다:
console.log(user["name"]); // 민지대부분의 경우 점 표기법이 더 깔끔하게 읽혀서 이를 사용하세요. 대괄호는 키가 순수한 단어가 아닐 때(예: 공백이 있을 때) 또는 미리 키를 모를 때 다른 변수에 있을 때 유용합니다.
const product = {
title: "책상 스탠드",
price: 40,
inStock: true,
};
console.log(`${product.title} costs ${product.price}`); // 책상 스탠드 costs 40객체는 다른 값처럼 값입니다. const에 저장하거나, 배열에 넣거나, 함수에 전달하거나, 반환할 수 있습니다. 키는 그 부분에 이름을 제공하는데, 그것이 전부입니다: product.price는 그것이 무엇인지 말하는데, 변수에 있는 맨 40은 그렇지 않습니다.
key: value 쌍으로 작성됩니다. 점과 키로 값을 읽으세요, user.name처럼. 대괄호 형식은 키에 홀수 문자가 있거나 변수에 있을 때만 사용하세요. 객체 변경하기
객체는 만들어진 후 고정되지 않습니다. 새 키를 추가하거나, 기존 키를 변경하거나, 완전히 제거할 수 있습니다. 추가하거나 업데이트하려면 키에 할당합니다:
const user = {
name: "민지",
};
user.age = 30; // 새 키 추가
user.name = "민지 김"; // 기존 키 업데이트
console.log(user); // { name: "민지 김", age: 30 }키가 이미 존재하면 할당하면 값을 바꾸고, 존재하지 않으면 생성됩니다. 키를 제거하려면 delete를 사용합니다:
delete user.age;
console.log(user); // { name: "민지 김" }여기가 사람들을 놀라게 하는 부분입니다. A const 객체는 여전히 그 속성을 변경할 수 있습니다. const는 user 이름이 다른 객체를 가리킬 수 없다는 의미이지만, 그것이 가리키는 객체는 공정한 게임입니다:
const cart = { total: 0 };
cart.total = 25; // 괜찮음, 내부 변경
// cart = { total: 25 }; // 이것은 오류일 것임, 이름 재할당delete를 사용하여 제거합니다. 놀라움은 const입니다: user가 다른 객체를 가리키지 못하게 하지만, 그것이 보유하는 객체 내부를 여전히 변경할 수 있습니다. const가 모든 것을 잠글 것으로 기대하지 않는 데 시간이 걸렸습니다. 메서드와 this
객체의 값은 함수일 수 있습니다. 그럴 때 이를 **메서드**라고 합니다: 객체가 저장하는 사실이 아니라 할 수 있는 것입니다. 같은 점과 괄호로 호출합니다:
const user = {
name: "민지",
greet() {
return `Hi, I am ${this.name}`;
},
};
console.log(user.greet()); // Hi, I am 민지내부의 새로운 단어는 this입니다. user.greet()을 호출할 때, this는 "이 메서드가 호출된 객체"를 의미하며, 여기서는 user입니다. 따라서 this.name은 같은 객체에서 name 키를 읽습니다. 이것이 메서드가 전달하지 않고 자신의 객체의 값에 접근하는 방식입니다.
user.greet()처럼 점과 괄호로 호출됩니다. 내부에서 this는 메서드가 호출된 객체를 의미하므로, this.name은 그 객체의 자신의 name을 읽습니다. 이것이 메서드가 자신의 객체의 값에 어떻게 접근하는지입니다. 객체와 배열 함께
대부분의 실제 데이터는 객체의 목록입니다: 많은 사용자, 많은 제품, 각 객체 하나의 같은 키를 가진 레코드. 객체를 배열에 넣습니다:
const products = [
{ title: "책상 스탠드", price: 40 },
{ title: "공책", price: 6 },
{ title: "펜", price: 3 },
];
console.log(products[0].title); // 책상 스탠드위치로 하나의 객체에 도달하고(products[0]), 그 다음 점으로 그 필드 중 하나(.title)에 도달합니다. 연결되면, products[0].title은 첫 번째 제품의 제목을 읽습니다.
모든 객체에서 필드를 읽으려면 배열을 반복합니다:
for (const product of products) {
console.log(product.title);
}
// 책상 스탠드
// 공책
// 펜루프의 각 차례에, product는 목록의 하나의 객체이고, product.title은 그 제목을 읽습니다. 이 형태, 반복하는 객체의 배열은 당신이 할 대부분의 데이터 작업입니다.
products[0]로 도달하고, 그 다음 products[0].title로 필드에 도달합니다. 배열을 반복하여 모든 레코드에 닿으면, 당신이 할 대부분의 데이터 작업 뒤의 패턴이 있습니다. 객체가 다음에 어디로 가는지
객체와 배열은 지속적으로 도달할 두 구조이며, 취급할 대부분의 데이터는 두 가지의 일종의 중첩입니다: 배열 필드를 가진 객체, 객체의 배열, 그리고 둘 다의 조합. 배열 메서드와 쌍을 이루면, 필요한 형태로 거의 모든 데이터를 형성할 수 있습니다.
다음 단계는 페이지에 객체를 사용하는 것입니다. DOM에 도달하면, 읽고 변경하는 요소는 또한 객체이며, 설정하는 키와 호출하는 메서드를 가지므로, 여기의 모든 것은 직접적으로 수행됩니다.

