원시타입은 불변성을 가지고 있고 참조타입은 그렇지 않다.
원시 : Boolean , String, Number, Null, undefined, Symbol
참조 : Object, Array (객체, 배열)
원시타입의 경우엔 불변성의 성질을 가지고 있어서 값을 재할당하거나 하는데에 있어서 자유롭다. 기존 값이 사라지는게 아니라 새로운 값과 기존 값이 각각 다른 메모리장소에 저장되는 것이기 때문이다.
그러나 참조타입(배열,객체)는 재할당을 하게되면 주소 값이 아닌 참조타입 메모리자체가 변경이 되어버려 예상치 못한 오류가 발생할 수 있다. 따라서 불변성을 지켜주어야 한다.
참조타입에서는 값을 바꿨을 때 callstack 주소 값은 같은데, heap 메모리 값만 바꿔주기에 불변성을 유지할 수 없었으므로 아예 새로운 배열을 반환하는 메소드를 사용하면 된다.
새로운 배열을 반환하는 메소드
ex) spread연산자, map, filter, slice, reduce
원본데이터 자체를 변경하는 메서드
ex) splice, push