
원시자료형과 참조자료형을 알아가기에 앞서 스택과 힙에 대해서 먼저 알아두고가는것이 다가가기 수월할것이다
스택(stack)은 '서랍장'이라고 예시해보겠다 물건을 정리할때 각기 서랍안에
양말,옷핀,지우개 등등 의 품목들을 넣어두는일!!!이라고 생각해보자 .
힙(heap)이란곳은 'city' 예시해보자 하나의 큰도시에 방대한 데이터를 저장
할수있다는것이다 .
여기서 두 자료형의 차이점을 알아보도록하자.
1.원시자료형
2.참조자료형

1.원시자료형은 객체가 아니면서 method를 가지지 않는 데이터를 말한다.
let a = 10 let b = a //변수 a 에 할당된 10은 하나의 저장칸을 차지했다 여기서 원시자효형은 값 자체가 복사하게된다. 즉, 변수 a과 변수 b는 동일하게 10이라는 값을 가지게 되는것이다.

2.참조자료형은 원시자료형이 아닌 모든 데이터 타입이다.
array , object , function
참조자료형의 스택에는 데이터를 저장했던 주소지만 들어있고 실제 데이터는
힙(heap)이라는 곳 저장된다.
1)위 그림처럼 객체 복사하기위해서는 Object.assign()을 사용한다.
let a = { name : 'John', age : 22 } let b = Object.assign({},a); console.log(a===b) // false --> 변수의 재할당으로 복사는 했지만 스택의 서랍장 주소지가 다르기때문에 a===b 물어본결과 false 가 나오게 된것이다.
> ```
2)배열복사하기
let arr = [0,1,2,3,4]; let addArr = arr.slice(); console.log(arr = addArr) //false --> 이또한 원본 배열과 같은 요소를 갖지만 각기 다른 주소값이다.
> slice() 메서드는 어떤 배열의 begin 부터 end 까지(end 미포함)에 대한 얕은 복사본을
새로운 배열 객체로 반환합니다. 원본 배열은 바뀌지 않는다.
let arr = [0,1,2,3,4]; let newArr = [...arr]; console.log(newArr) // [0,1,2,3,4] console.log(arr === newArr) // false ---> 이또한 새로운 배열(newArr)안에 배열을 펼쳐서 전달했음에도 각기 다른 주소값이기에 false 가 나오게된다.
위 참조 자료형 내부에 참조 자료형이 중첩되어 있는 경우, slice(), Object.assign(), spread syntax를 사용해도 참조 자료형 내부에 참조 자료형이 중첩된 구조는 복사할 수 없다. 참조 자료형이 몇 단계로 중첩되어 있던지, 위에서 설명한 방법으로는 한 단계까지만 복사하는것이 얕은 복사라고한다.
const arr = [1, 2, [3, 4]]; const copiedArr = JSON.parse(JSON.stringify(arr)); console.log(arr); // [1, 2, [3, 4]] console.log(copiedArr); // [1, 2, [3, 4]] console.log(arr === copiedArr) // false console.log(arr[2] === copiedArr[2]) // false
-JSON.stringify(value[, replacer[, space]]
-JSON.parse(text[, reviver])