Post

기본 타입의 복사

기본 타입(primitive)인 number, string, boolean, Null, Undefined, NaN는 복사가 된다. 기본 타입이 아니면 복사가 되지 않으며 참조만 된다.

 

(1) number

let num00 = 10;
let num01 = num00;
num00 += 5;
console.log(num00); // 15
console.log(num01); // 10

let num01 = num00; 이라고 할당한 시점에서 num01에는 num00에 최초 할당했던 10의 깊은 복사(deep copy)가 이루어지기에, 별개의 개체가 된다. 따라서 그 후에 num00에 5를 더해도 num00의 값이 바뀔 뿐, num01은 값은 변화하지 않는다.

 

 

(2) string

let txt00 = "테스트용 텍스트";
let txt01 = txt00;
txt00 = "변경된 텍스트";
console.log(txt00); // 변경된 텍스트
console.log(txt01); // 테스트용 텍스트

 

 

(3) boolean

let trueFalse00 = false;
let trueFalse01 = trueFalse00;
trueFalse00 = true;
console.log(trueFalse00); // true
console.log(trueFalse01); // false

 

 

(4) null

let exist00 = null;
let exist01 = exist00;
exist00 = 10;
console.log(exist00); // 10
console.log(exist01); // null

 

 

(5) undefined

let exist00;
let exist01 = exist00;
exist00 = "테스트";
console.log(exist00); // 테스트
console.log(exist01); // undefined

 

 

(6) NaN

let exist00 = NaN;
let exist01 = exist00;
exist00 = 999;
console.log(exist00); // 999
console.log(exist01); // NaN

 

 

 

 

 

얕은 복사(shallow copy)와 깊은 복사(deep copy)

(1) Shallow Copy

const animals = ["lion", "tiger", "rabbit"];
const shallowCopyAnimals = animals;

animals.push("dog");
console.log(animals); // [ 'lion', 'tiger', 'rabbit', 'dog' ]
console.log(shallowCopyAnimals); // [ 'lion', 'tiger', 'rabbit', 'dog'  ]

 

 

(2) Deep Copy

const animals = ["lion", "tiger", "rabbit"];
const deepCopyAnimals = animals.map(function (item, idx) {
  return item;
});
animals.push("dog");
console.log(animals); // [ 'lion', 'tiger', 'rabbit', 'dog' ]
console.log(deepCopyAnimals); // [ 'lion', 'tiger', 'rabbit' ]

 

'JavaScript related' 카테고리의 다른 글

JavaScript Promise  (0) 2023.01.25
JavaScript Async Function  (0) 2023.01.25
JavaScript Array.fill.map  (0) 2023.01.25
JavaScript Sorting  (0) 2023.01.25
JavaScript Append Items  (0) 2023.01.23
▲ top