컴퓨터/JavaScript_typescript

[JavaScript] Object.freeze : 객체를 불변하게 만들기, const(reference 규제)와의 차이점(freeze: 값을 규제)

수제녹차 2020. 2. 11. 14:07
728x90
반응형

* object는 쉽게 바뀔 수 있다.

var o1 = {name:'kim'. score[1,2]};

o1.name = 'lee';
console.log(o1); // o1이라는 원본을 바꿔버린다 {name:'lee', score[1,2]}

 

* Object.freeze

가변이면 안되는 데이터를 규제할 수 있다.

var o1 = {name:'kim'. score[1,2]};
Object.freeze(o1)
o1.name = 'lee';
console.log(o1); // {name:'kim', score[1,2]}

freeze를 풀고 싶다면 복사해야 한다.

 

* free한 객체 안에 다른 객체가 있다면 그것은 freeze하지 못한다.

var o1 = {name:'kim'. score[1,2]};
Object.freeze(o1)
o1.name = 'lee';
o1.city = 'Seoul';
console.log(o1); // {name:'kim', score[1,2]}


o1.score.push(3); // o1.score는 변한다. reference만 갖고 있기 때문.
console.log(o1); // {name:'kim', score[1,2,3]}

o1.score는 변한다. reference만 갖고 있기 때문.

 

이 때 따로 

Object.freeze(o1.score);

를 해주면

o1.score.push(3// error가 발생한다

 

* const와의 차이점

const : 가리키는 대상을 못 바꾸게 한다.

Object.freeze : 값을 못 바꾸게 한다.

const o1 = {name:'kim'};
Object.freeze(o1);
const o2 = {name:'kim'};

o1 = o2; // const 때문에 실패, error
o1.name = 'lee'; // freeze 때문에 실해

 

source : 생활코딩

반응형