객체 메소드(Object methods), 계산된 프로퍼티(Computed property)

라용·2022년 7월 29일
0

인프런 강의 자바스크립트 중급 - 코딩앙마 를 듣고 정리한 내용입니다.

계산된 프로퍼티는 아래와 같습니다.

let a = 'age';

const user = {
	name : 'Mike',
	age : 30
}

// 위 식을 아래처럼 쓸 수 있습니다.

const user = {
	name : 'Mike',
	[a] : 30
}

변수에 할당된 값을 객체의 key 로 넣을 수 있습니다. 아래 처럼 식 자체를 넣는 것도 가능합니다.

const user = {
	[1+4] : 5,
	["안녕"+"하세요"] : "Hello"
}

user 
-> {5: 5, 안녕하세요: "Hello"}

아래와 같이 key 값이 바뀌는 객체를 만들 때 유용합니다.

function makeObj(key, val){
	return {
		[key]: val,
	};
}
const obj = makeObj("나이", 33);
console.log(obj); 

아래 객체 메소드를 살펴보겠습니다.

Object.assign()
Object.keys()
Object.values()
Object.entries()
Object.fromEntries()

Object.assign() 은 객체를 복제합니다. 아래와 같이 대입하는 것은 객체 자체를 복제하는 것이 아니라 하나의 객체에 두 변수가 접근하는 것을 의미합니다.

const user = {
	name : 'Mike',
	age : 30
}
const cloneUser = user;
// cloneUser 를 바꾸면, user 도 바뀌는 상태

동일하게 복제하려면 Object.assign() 메소드를 써야 합니다.

const newUser = Object.assign({}, user);

여기서 빈 객체 {} 는 초기값이고 두번째 매개변수로 들어온 객체가 초기값에 반영됩니다.

const user = {
	name : 'Mike',
	age : 30
}
Object.assign({ gender : 'male' }, user);
// 이렇게 하면 설명만 있는 객체에 유저를 병합하는 것
// 총 3개 프로퍼티 가지게 됨 

const user = {
	name : 'Mike',
	age : 30
}
Object.assign({ name : 'Jane' }, user);
// 초기값에 같은 key 값이 있다면, 매개변수로 들어오는 내용이 덮어 씀

두개 이상의 객체도 합칠 수 있습니다.

const user = {
	name: 'Mike'
}
const info1 = {
	age: 30
}
const info2 = {
	gender: 'male'
}
Object.assign(user, info1, info2)

Object.keys() 메소드는 객체의 key 를 배열로 반환합니다.

const user = {
	name: 'Mike',
	age: 30,
	gender : 'male',
}
Object.keys(user); // ->  ["name", "age", "gender"]

Object.values() 메소드는 객체의 value 를 반환합니다.

const user = {
	name: 'Mike',
	age: 30,
	gender : 'male',
}
Object.values(user); // ->  ['Mike', 30, 'male']

Object.entries() 메소드는 keyvalue 를 배열로 묶어서 반환합니다.

const user = {
	name: 'Mike',
	age: 30,
	gender : 'male',
}
Object.entries(user); 
[
	["name", "Mike"],
	["age", 30],
	["gender", "male"]
]

Object.fromEntries() 는 반대로 동작합니다. keyvalue 로 붂은 배열을 객체로 만들어줍니다.

const arr = [
	["name", "Mike"],
	["age", 30],
	["gender", "male"]
]
Object.fromEntries(arr);
{
	name: 'Mike',
	age: 30,
	gender : 'male',
}
profile
Today I Learned

0개의 댓글