JavaScript 기초문법 2️⃣
3974 단어 JavaScriptJavaScript
◾️object
- object는 다수의 원시 자료형을 포함하거나 복잡한 개체(entity)를 표현할 수 있는 자료형
- object는 Object() or 중괄호
{}
를 통해 생성 - object 개체는
key: value
형태로 표현하며, 접근은object.key
형태로 표현 - 객체에 개체 추가는
obj.key=value
, 삭제는 delete 명령어를 통해 수행한다.
let user = {
name: "john",
age: 27,
};
user에 대한 메모리공간에는 주소값이 저장된다.
이 주소값은 name과 age가 저장되는 메모리 공간을 가르키는 주소값이다.
주소값을 참조(reference)해서 name에 대한 데이터와 age에 대한 데이터에 접근을 하는 것 이다.
객체 예제 코드
let user = {
name: "john",
age:27,
};
console.log(typeof user); //output : object
console.log(typeof user.name); //output : string
console.log(typeof user.age); //output : number
console.log(user); //output : { name: 'john', age: 27 }
console.log(user.name); //output : john
console.log(user.age); //output : 27
// 값 변경하기
user.age=30;
console.log(user.age); // output : 30
// 값 추가하기
user.weight = 72;
console.log(user); //output : { name: 'john', age: 30, weight: 72 }
// 값 삭제하기
delete user.age;
console.log(user); //output : { name: 'john', weight: 72 }
⛔️ 객체 복사 문제점
let user = {
name: "john",
age:27,
};
let admin = user; //객체 복사
console.log(admin); // output : { name: 'john', age: 27 }
admin.name = "park";
console.log(admin.name); //output : park
console.log(user.name); // output : park <- 여기가 문제이다. user는 john이어야 하는데 왜 park 일까?
- object의 값을 복사할 때는 대상 전체가 아닌 object 내 주소 값만 복사되는 문제가 발생된다. ( user와 admin의 주소값이 동일해서 문제가 생기는 것 이다.)
- 가리키는 대상 전체를 복사하는 방법은 얕은 복사(Shallow copy),
깊은 복사(Deep copy)를 통해 가능하다.
◾️ 얕은 복사
1️⃣ 반복문 for 문을 통한 객체 복사
let user = {
name: "john",
age:27,
};
let admin = {};
//얕은 복사
for (let key in user){
admin[key] = user[key];
}
admin.name = "park";
console.log(admin.name); //output : "park"
console.log(user.name); //output : "john"
2️⃣ 반복문 for 문을 통한 객체 복사
let user = {
name: "john",
age:27,
};
let admin_obj = Object.assign({},user);
admin_obj.name = "park";
user.age = 30;
console.log(admin_obj.name); //output:"park"
console.log(user.name); //output:"john"
console.log(admin_obj.age); //output:27
console.log(user.age); //output:30
3️⃣ ES6에서부터 지원하는 전개 연산자(Spread Operator)를 이용한 복사
let user = {
name: "john",
age:27,
};
let admin_spread = {...user};
admin_spread.name = "park";
user.age = 30;
console.log(admin_spread.name); //output:"park"
console.log(user.name); //output:"john"
console.log(admin_spread.age); //output:27
console.log(user.age); //output:30
⛔️ 얕은 복사 문제점
- 객체 내 또 다른 객체가 있다면 복사되지 않는다.
◾️ 깊은 복사
- 얕은 복사의 문제를 해결하기 위한 방법이다.
JSON 객체를 이용한 깊은 객체 복사
let user = {
name: "john",
age:27,
sizes :{
height:180,
weight:72,
},
};
// stringfy : js object -> string, parse : string -> js object
let admin_json = JSON.parse(JSON.stringify(user));
admin_json.sizes.weight++;
--admin_json.sizes.height;
console.log(admin_json.sizes.weight); //output : 73
console.log(admin_json.sizes.height); //output : 179
console.log(user.sizes.weight); //output : 72
console.log(user.sizes.height); //lutput : 180
- stringify는 객체를 문자열로 변환하는데 이때 원본 객체와의 참조가 끊긴다.
Author And Source
이 문제에 관하여(JavaScript 기초문법 2️⃣), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hodoo/JavaScript-기초문법-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)