자바스크립트 객체는 매우 유연하기 때문에 의도치 않은 변형이 일어날 수 있습니다.
이때 객체 수정을 막는 방법은 아래와 같습니다.
1. const
1-1) 설명 : 블록 범위의 상수를 선언합니다.
1-2) 기능 : 재할당 불가
1-3) 예외 : 객체 속성 추가, 수정, 삭제 가능
2. Object.freeze()
2-1) 설명 : 이 메서드는 객체를 동결합니다. Object.isFrozen() 메서드를 이용하여 객체의 동결여부를 확인할 수 있습니다.
2-2) 기능 :
- 새로운 속성 추가 불가
- 기존 속성 삭제 불가
- 기존 속성값 변경 불가
- 프로토타입 변경 불가
2-3) 예외 :
- Object.freeze(object) 호출의 결과는 object 스스로의 직속 속성에만 적용되며, object에 대해서만 속성 추가, 제거, 재할당 연산을 방지합니다. 만약 그 속성의 값이 객체라면, 그 객체는 동결되지 않으며 속성 추가, 제거, 재할당의 대상이 될 수 있습니다.동결된 객체가 변경될 수 있습니다.
- string, number, boolean 값은 언제나 불변하고, Function, Array 는 객체(object)임을 유의
const obj1 = {
internal: {}
};
Object.freeze(obj1);
obj1.internal.a = 'aValue';
obj1.internal.a // 'aValue'
3. Object.seal()
3-1) 설명 : 이 메서드는 객체를 밀봉합니다. Object.isSealed() 메서드를 이용하여 객체의 밀봉여부를 확인할 수 있습니다.
3-2) 기능 :
- 새로운 속성 추가 불가
- 기존 속성 삭제 불가
3-3) 예외 :
- 기존 속성값 변경 가능
4. Object.preventExtensions()
4-1) 설명 : 이 메서드는 객체의 확장을 제한합니다. Object.isExtensible() 메서드를 이용하여 객체의 확장여부를 확인할 수 있습니다.
4-2) 기능 :
- 새로운 속성 추가 불가
4-3) 예외 :
- 기존 속성 삭제 가능
- 기존 속성값 변경 가능
[References]
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/const
const - JavaScript | MDN
const 선언은 블록 범위의 상수를 선언합니다. 상수의 값은 재할당할 수 없으며 다시 선언할 수도 없습니다.
developer.mozilla.org
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
Object.freeze() - JavaScript | MDN
Object.freeze() 메서드는 객체를 동결합니다. 동결된 객체는 더 이상 변경될 수 없습니다. 즉, 동결된 객체는 새로운 속성을 추가하거나 존재하는 속성을 제거하는 것을 방지하며 존재하는 속성의
developer.mozilla.org
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/seal
Object.seal() - JavaScript | MDN
Object.seal() 메서드는 객체를 밀봉합니다. 객체를 밀봉하면 그 객체에는 새로운 속성을 추가할 수 없고, 현재 존재하는 모든 속성을 설정 불가능 상태로 만들어줍니다. 하지만 쓰기 가능한 속성의
developer.mozilla.org
Object.preventExtensions() - JavaScript | MDN
Object.preventExtensions() 메서드는 새로운 속성이 이제까지 객체에 추가되는 것을 방지합니다 (즉 객체의 장래 확장을 막습니다).
developer.mozilla.org
'JavaScript' 카테고리의 다른 글
| [JavaScript] private class fields (자바스크립트 private 변수) (0) | 2022.10.05 |
|---|---|
| [JavaScript] 자바스크립트 단점 (0) | 2022.10.05 |
| [JavaScript] 프로토타입(prototype) (0) | 2022.08.11 |
| [JavaScript] 동기 & 비동기 (0) | 2020.08.27 |

