์์๋ณต์ฌ : ๋ฐ๋ก ์๋ ๋จ๊ณ์ ๊ฐ๋ง ๋ณต์ฌ
๊น์๋ณต์ฌ : ๋ด๋ถ์ ๋ชจ๋ ๊ฐ๋ค์ ํ๋ํ๋ ์ฐพ์์ ์ ๋ถ ๋ณต์ฌ
(๊ฐ์ฒด์์ ๊ฐ์ฒด๋ด์ฉ๋ง์ ์ ๋ถ ํ๋ํ๋ ๋ณต์ฌํ๋ค)
์ค์ฒฉ๋ ๊ฐ์ฒด์ ๋ํด์ ์๋ ๋จ๊ณ์ ๋ณต์ฌ๋ง ์ด๋ค์ง ๊ฒฝ์ฐ ํด๋น ์๋์ ํ๋กํผํฐ ๋ณ๊ฒฝ์์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์๋ก ์ํฅ์ ๋ฐ๋๋ค. (๋ถ๋ณ ๊ฐ์ฒด๊ฐ ์๋๊ฒ ๋๋ค.)
var copyObject = function (target){
var result = {};
for( var prop in target){
result[prop] = target[prop];
}
return result;
};
var user = {
name : 'msk',
information : {
friend : '์ฟ ๋ก์ฝ',
school : 'ํ ํค์๋ค์ด'
}
}
var user2 = copyObject(user);
user2.name = 'kim';
console.log(user.name === user2.name); // false
user.information.school = '๋จ๊ตญ๋ํ๊ต'
console.log(user.information.school === user2.information.school) //true
์์๋ณต์ฌ๋ก ์์๋ถ๋ถ์ธ name์๋ ์๋ก ์ํฅ์ ๋ผ์น์ง ์์์ง๋ง ๊น์๋ถ๋ถ์ธ school์๋ ์๋ก ์ํฅ์ ๋ผ์น๋ค.
๋ฐ๋ผ์ ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ผ ๊ฒฝ์ฐ์๋ ๊ทธ๋๋ก ๋ณต์ฌํ๋ฉด ๋์ง๋ง ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๋ค์ ๊ทธ ๋ด๋ถ์ ํ๋กํผํฐ๋ค์ ๋ณต์ฌํด์ผํ๋ค.
- ์ฌ๊ทํจ์ : ๋ด๋ถ ํ๋กํผํฐ๊น์ง์ ์ฉ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์
- JSON ๋ฌธ์์ด ๋ณํ ๋ฐ ๊ฐ์ฒด๋ก ๋ค์ ๋ณํ : ๊ฐ์ฒด์ ์ฐธ์กฐ ์ญ์ ์ํฅ
- ๋ฆฌํดํ ๊ฐ์ฒด ํน์ ๋ฐฐ์ด ์ฌ์ฉํ๊ธฐ
- [...] ์ฌ์ฉ
var copyObjectDeep = function (target){
var result = {};
if(typeof target === 'object' && target !== null){
for( var prop in target){
result[prop] = copyObjectDeep(target[prop]);
}
}
else{
result = target
}
return result;
};
์ด์ ์ ํจ์์ ๋ค๋ฅด๊ฒ ์ฌ๊ท๋ก ๋ด๋ถ๊ฐ ๊ฐ์ฒด๋ผ๋ฉด ๋ด์ฉ์ ๋ฐ๋ณตํด์ ๋ณต์ฌํ๋ ๊ฒ์ ์ ์ ์๋ค.
var copyObjectViaJson = function (target){
return JSON.parse(JSON.stringify(target));
}
๋ฌธ์์ด๋ก ๋ณํ ํ ๋ค์ ๊ฐ์ฒด๋ก ๋ณํํ๋ฉด ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ ์์ด์ง๋ค => ์๋ก ์ํฅ์ ๋ฐ์ง์๋๋ค.
const a = [1,2,3]
const b = [...a]
a.splice(0,1)
a
[2, 3]
b
[1, 2, 3]
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ก๋ฅผ ๋น๊ตํ๋ ค๋ฉด ===(์ผ์น์ฐ์ฐ์)๋ฅผ ์จ์ผํ๋ค.
console.log(null == undefined) // true
null : ๋ช ์์ ์ผ๋ก ๋น์ด์์์ ๋ํ๋ด๊ณ ์ถ์ ๋
undefined : ๊ฐ์ ๋์ ํ์ง์์ ๋ณ์์ ์ ๊ทผํ๊ณ ์ ํ ๋
undefined | empty | |
---|---|---|
์ํ(forEach) | ์๋ | ๋ฌด์ |
ํ๋กํผํฐ, ํค ๊ฐ | ์กด์ฌ | ์กด์ฌX |
ํท๊ฐ๋ฆฌ๋๊น ๊ทธ๋ฅ
๋น์ด์์
์ ๋ช ์์ ์ผ๋ก ๋ํ๋ด๊ณ ์ถ์๋๋null
์ ์ฌ์ฉํด๋ผ
- ๊ธฐ๋ณธํ(๋ถ๋ณ์ฑ) vs ์ฐธ์กฐํ(๊ฐ๋ณ์ฑ)
- ๋ณ์์ ์๋ณ์
๋ณ์ : ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธธ ์ ์๋ ๊ณต๊ฐ
์๋ณ์ : ๊ทธ ๋ณ์์ ์ด๋ฆ- ์์๋ณต์ฌ vs ๊น์๋ณต์ฌ
- ๊น์ ๋ณต์ฌ์ 3๊ฐ์ง ๋ฐฉ๋ฒ
- undefined vs null
const arr = [
{name:[1,2,3,4]},{age:[10,20,30,40]}
]
const arrCopy = [...arr]
arrCopy[0].name[1] = 100
console.log(arr,arrCopy)
const arr1 = [1,2,3,4,5]
const arr1Copy = [...arr1]
arr1Copy[0] = 1000
console.log(arr1,arr1Copy)
// { name: [ 1, 100, 3, 4 ] }, { age: [ 10, 20, 30, 40 ] } ] [ { name: [ 1, 100, 3, 4 ] }, { age: [ 10, 20, 30, 40 ] } ]
// [ 1, 2, 3, 4, 5 ] [ 1000, 2, 3, 4, 5 ]
arrCopy์ ๋ด๋ถ๊ฐ์ 100์ผ๋ก ๋ฐ๊พธ์์ผ๋
arr์ ๋ด๋ถ๊ฐ ๋ํ 100์ผ๋ก ๋ฐ๊พธ์ด์ก๋ค.
๊น์ด๊ฐ 1์ธ arr1๊ณผ arr1copy๋ arr1Copy์ ๋ณ์๊ฐ์ด ๋ฐ๋์ด๋ arr1์ ๋ฐ๋์ง์์ ๊ฒ์ ๋ณผ ์ ์๋ค.
const arr = [
{name:[1,2,3,4]},{age:[10,20,30,40]}
]
// const arrCopy = [...arr]
const arrCopy = JSON.parse(JSON.stringify(arr))
arrCopy[0].name[1] = 100
console.log(arr,arrCopy)
const arr1 = [1,2,3,4,5]
// const arr1Copy = [...arr1]
const arr1Copy = JSON.parse(JSON.stringify(arr1))
arr1Copy[0] = 1000
console.log(arr1,arr1Copy)
// [ { name: [ 1, 2, 3, 4 ] }, { age: [ 10, 20, 30, 40 ] }]
// [ { name: [ 1, 100, 3, 4 ] }, { age: [ 10, 20, 30, 40 ] } ]
// [ 1, 2, 3, 4, 5 ] [ 1000, 2, 3, 4, 5 ]
arrCopy์ ๋ด๋ถ ๊ฐ์ด ๋ฐ๋์ด๋ arr์ ๋ด๋ถ๊ฐ์๋ ์ํฅ์ ์ฃผ์ง์๋๋ค.
arr1Copy๋ ๊น์ด๊ฐ 1๋ก ๋ด๋ถ๊ฐ์ด ๋ฐ๋์ด๋ arr1์ ๋ด๋ถ๊ฐ์๋ ์ํฅ์ ์ฃผ์ง์๋๋ค.
const user = {
name : 'msk',
information : {
friend : '์ฟ ๋ก์ฝ',
school : 'ํ ํค์๋ค์ด'
}
}
const user1 = {...user}
user.information.friend = '๋ฐ๋์ด๋ผ'
user1.name = '~~~'
console.log(user,user1)
//{ name: 'msk', information: { friend: '๋ฐ๋์ด๋ผ', school: 'ํ ํค์๋ค์ด' } }
//{ name: '~~~', information: { friend: '๋ฐ๋์ด๋ผ', school: 'ํ ํค์๋ค์ด' } }
user.information.friend์ ๊น์ด 2์ ๋ถ๋ถ์ ๋ฐ๋์ด user1์๋ ์ํฅ์ ๋ผ์น๋ค.
const user = {
name : 'msk',
information : {
friend : '์ฟ ๋ก์ฝ',
school : 'ํ ํค์๋ค์ด'
}
}
// const user1 = {...user}
// user.information.friend = '๋ฐ๋์ด๋ผ'
// user1.name = '~~~'
// console.log(user,user1)
const user1 = JSON.parse(JSON.stringify(user))
user.information.friend = '๋ฐ๋์ด๋ผ'
user1.name = '~~~'
console.log(user,user1)
//{ name: 'msk', information: { friend: '๋ฐ๋์ด๋ผ', school: 'ํ ํค์๋ค์ด' } }
//{ name: '~~~', information: { friend: '์ฟ ๋ก์ฝ', school: 'ํ ํค์๋ค์ด' } }
user.information.friend๊ฐ user1์๋ ์ํฅ์ ๋ผ์น์ง์๋๋ค.
const obj = {
count : 0
}
const objFunc = ()=>{
return {count:0}
}
const A = obj
const B = obj
const C = objFunc()
const D = objFunc()
console.log(A,B,C,D)
A.count = 1000
C.count = 1000000
console.log(A,B,C,D)
//{ count: 0 } { count: 0 } { count: 0 } { count: 0 }
//{ count: 1000 } { count: 1000 } { count: 1000000 } { count: 0 }
๊ทธ๋ฅ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ์ฌ ์ฌ์ฉํ ๊ฒฝ์ฐ A์ ๊ฐ์ด ๋ฐ๋๋ฉด B์ ๊ฐ์ ์ํฅ์ ์ค๋ค.
ํ์ง๋ง returnํ ๊ฐ์ฒด๊ฐ ๋ณต์ฌ๋์ด ์ฌ์ฉํ ๊ฒฝ์ฐ C๊ฐ ๋ฐ๋์ด๋ D๊ฐ ๋ฐ๋์ง์๋๋ค.
- ๊ฐ์ ๋ฐ๋ก ๋ฐ๊ธฐ
[...]
,{...}
์ฌ์ฉํ๊ธฐ
- ์ฌ๊ทํจ์ : ๋ด๋ถ ํ๋กํผํฐ๊น์ง์ ์ฉ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์
- JSON ๋ฌธ์์ด ๋ณํ ๋ฐ ๊ฐ์ฒด๋ก ๋ค์ ๋ณํ : ๊ฐ์ฒด์ ์ฐธ์กฐ ์ญ์ ์ํฅ
- ๋ฆฌํดํ ๊ฐ์ฒด ํน์ ๋ฐฐ์ด ์ฌ์ฉํ๊ธฐ
์ฝ์ด์๋ฐ์คํฌ๋ฆฝํธ