Dealing With Objects in JavaScript With Object.assign, Object.keys and hasOwnProperty - Lee-hyuna/33-js-concepts-kr GitHub Wiki
์ด ๊ฒ์๋ฌผ์ JavaScript์์ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ ์ฉํ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ ํ์ํ๋ ๋ฐ ๋์์ด ๋๋ ์ผ์ข ์ Grab Bab(์ด๊ฒ ๋ญ์ง ๋ชจ๋ฅด๊ฒ ์)์ด๋ค. Object.keys, Object.protype.hasOwnProperty ๋ฐ ์๋ก์ด Object.assign์ ๋ํด ์์๋ณด๋๋ก ํ๋ค.
hasOwnProperty
hasOwnProperty
๋ ๊ฐ์ฒด์ ์ธ์คํด์ค์ ์์ฑ์ด ์๋์ง ์๋์ง ํ์ธ ํ ์ ์๋ ๋ฉ์๋์ด๋ค. ์ด ์ ์ ๋งค์ฐ ๋ช
ํํ๊ฒ ์ค๋ช
ํ๋ ์์ ๋ฅผ ์๋์์ ํ์ธํด๋ณด์.
const myObj = {
clown: '๐คก',
police: '๐ฎ',
santa: '๐
',
farmer: '๐ฉโ๐พ'
}
console.log('clown' in myObj); // true
console.log('valueOf' in myObj); // true
console.log(myObj.hasOwnProperty('clown')); // true
console.log(myObj.hasOwnProperty('valueOf')); // false
Object.keys
Object.keys
๋ ๊ฐ์ฒด์ Property key๊ฐ๋ค๋ง ์๋ก์ด ๋ฐฐ์ด๋ก returnํด์ฃผ๋ ๋ฉ์๋์ด๋ค.
const myObj = {
clown: '๐คก',
police: '๐ฎ',
santa: '๐
',
farmer: '๐ฉโ๐พ'
}
console.log(Object.keys(myObj));
// ["clown", "police", "santa", "farmer"]
Object.keys
๋ for...of
๋ฌธ์ ํตํด ์์ฃผ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
const myObj = {
clown: '๐คก',
police: '๐ฎ',
santa: '๐
',
farmer: '๐ฉโ๐พ'
}
for (let k of Object.keys(myObj)) {
console.log(`Hey ${ myObj[k] }!`);
}
// "Hey ๐คก!"
// "Hey ๐ฎ!"
// "Hey ๐
!"
// "Hey ๐ฉโ๐พ!"
Note:
Object.keys
์์ array๊ฐ ๋ฐํ๋์๋ค.keys
๊ฐ ๊ผญ ์์๋๋ก ์์ ํ์๋ ์๋ค.
Object.assign
ES2015(ES6)๋ Object
์์ฑ์์ ๋ํ ์๋ก์ด ์ ์ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค. Object.assign
์ ๊ฐ์ ๊ฐ์ฒด์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ์ฝ๊ฒ ๋ณต์ฌํ ์ ์๋ค. ๋ค์ ์์ ์์๋ ๋น ๊ฐ์ฒด๋ฅผ ๋ฌธ์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ myObj
์ ์์ฑ์ ๋ณต์ฌํ์ฌ myObj
์ ๋ณต์ฌ๋ณธ์ธ ์ ๊ฐ์ฒด(myObj3
)๋ฅผ ๋ง๋ ๋ค.
const myObj = {
clown: '๐คก',
police: '๐ฎ',
santa: '๐
',
farmer: '๐ฉโ๐พ'
}
const myObj2 = myObj;
const myObj3 = Object.assign({}, myObj);
console.log(Object.is(myObj, myObj2)); // true
console.log(Object.is(myObj, myObj3)); // false
console.log(myObj3);
// Object {
// clown: "๐คก",
// farmer: "๐ฉโ๐พ",
// police: "๐ฎ",
// santa: "๐
"
// }
Note:
Object.is
๋ ๋ ๊ฐ์ฒด๊ฐ ๋์ผํ์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ด๋ค.
Note: ๊ฐ์ฒด์ ์ด๊ฑฐ ๊ฐ๋ฅํ ์์ฑ๋ง
Object.assign
์ผ๋ก ๋ณต์ฌ๋๋ค.
์ฒซ ๋ฒ์งธ ์ธ์๋ Default ๊ฐ์ฒด์ด๊ณ ๋ค์ ์ธ์๋ ์ฃผ๊ฐ ๋ ๊ฐ์ฒด์ด๋ค. ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ์ ์์ผ๋ฉฐ ๋ง์ง๋ง์ผ๋ก ์ ๋ฌ๋ ๊ฐ์ฒด์ ์ค๋ณต ์์ฑ์ด ๋ค์์ ๋ฐ๋ฆ ๋๋ค.
const myObj = {
clown: '๐คก',
police: '๐ฎ',
santa: '๐
',
farmer: '๐ฉโ๐พ'
}
const myObj2 = Object.assign({}, myObj, {
santa: '๐',
teacher: '๐ฉโ๐ซ'
});
console.log(myObj2);
// Object {
// clown: "๐คก",
// farmer: "๐ฉโ๐พ",
// police: "๐ฎ",
// santa: "๐",
// teacher: "๐ฉโ๐ซ"
// }
Redux์์ ์ฌ์ฉํ๋ ์ํ๊ด๋ฆฌํจํด๊ณผ ๋น์ทํ๋ค. Object.assign์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด ๊ฐ์ฒด์์ ์์ ํ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ, ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๊ณ ํ์ฅํ ์ ์๋ค.
Bonus: Object.freeze
Object.freeze
๋ ๊ฐ์ฒด์ ์๋ณธ์ด ๋ฐ๋์ง ์๋๋ก ์๊ฒ ์ผ๋ฆฐ๋ค. ๋ค์ ์์์๋ ๊ฐ์ฒด์ ์์ฑ์ ๋ณ๊ฒฝํ๊ฑฐ๋, ์ถ๊ฐํ๊ฑฐ๋, ์ญ์ ํ ์ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
const myObj = {
clown: '๐คก',
police: '๐ฎ',
santa: '๐
',
farmer: '๐ฉโ๐พ'
}
myObj.clown = 'scary';
myObj.astronaut = '๐จโ๐';
Object.freeze(myObj);
myObj.clown = 'really scary';
myObj.student = '๐ฉโ๐';
delete myObj.santa;
console.log(myObj);
// Object {
// clown: "scary",
// farmer: "๐ฉโ๐พ",
// police: "๐ฎ",
// santa: "๐
",
// astronaut: "๐จโ๐"
// }
๊ทธ๋ฆฌ๊ณ ๋ ๋ค๋ฅธ ๋ฉ์๋์ธ Object.isFrozen
๋ฅผ ์ฌ์ฉํ๋๋ฐ, Object๊ฐ frozen์ด ๋์๋์ง ์ฒดํฌํ๋ ๋ฉ์๋์ด๋ค.
const myObj = {
clown: '๐คก',
police: '๐ฎ',
santa: '๐
',
farmer: '๐ฉโ๐พ'
}
console.log(Object.isFrozen(myObj)); // false
Object.freeze(myObj);
console.log(Object.isFrozen(myObj)); // true
์ค์ฒฉ๋ ๊ฐ์ฒด๋ ๊ฐ์ฒด์ ์ํด ์๋์ผ๋ก ๊ณ ์ ๋์ง ์๋๋ค. ๋ค์ ์์ ์์๋ ๊ฐ์ฒด๋ฅผ ์ผ๋ฆฐ ํ์๋ ์ค์ฒฉ๋ animals
๊ฐ์ฒด์ ์์ฑ์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ์ญ์ ๋ ์ ์๋ค.
const myObj = {
clown: '๐คก',
police: '๐ฎ',
santa: '๐
',
farmer: '๐ฉโ๐พ',
animals: {
cow: '๐',
rabbit: '๐'
}
}
Object.freeze(myObj);
delete myObj.animals.rabbit;
myObj.animals.cow = 'moo!';
console.log(myObj);
// Object {
// clown: "๐คก",
// farmer: "๐ฉโ๐พ",
// police: "๐ฎ",
// santa: "๐
",
// animals: {
// cow: 'moo!'
// }
// }