const obj = {
prop: 42
};
Object.freeze(obj);
obj.prop = 33;
// Throws an error in strict mode
console.log(obj.prop);
// expected output: 42
var o1 = {
name: 'kim',
score: [1, 2]
}
o1.name = 'lee';
console.log(o1);
var o1 = {
name: 'kim',
score: [1, 2]
}
Object.freeze(o1);
o1.name = 'lee';
console.log(o1);
o1.city = 'seoul';
→ 에러 발생
o1.score.push(3);
→ push는 또 된다. 이 객체는 다른 곳에 저장되어있고, 프로퍼티에는 래퍼런스만 저장되어 있기 때문이다. 그렇다면 그 객체까지 얼려야 한다.
Object.freeze(o1.score);
→ 위 명령어를 실행하면 에러가 발생한다. 해당 객체까지 얼렸기 때문이다.
C:\Users\yuri\Desktop\TEST\freeze-study\freeze-study.js:9
o1.score.push(3);
^
TypeError: Cannot add property 2, object is not extensible
at Array.push (<anonymous>)
at Object.<anonymous> (C:\Users\yuri\Desktop\TEST\freeze-study\freeze-study.js:9:10)
const o1 = {
name: 'kim'
}
Object.freeze(o1);
const o2 = {
name: 'lee'
}
o1 = o2;
PS C:\Users\yuri\Desktop\TEST\freeze-study> node .\freez_const.js
C:\Users\yuri\Desktop\TEST\freeze-study\freez_const.js:8
o1 = o2;
^
TypeError: Assignment to constant variable.
at Object.<anonymous> (C:\Users\yuri\Desktop\TEST\freeze-study\freez_const.js:8:4)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47
→ 위 코드를 실행 시 다음의 오류가 발생한다. const 때문에 발생한 오류이다. 만약 키워드 변수가 const 가 아닌 var 이라면 문제가 발생하지 않았을 것이다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
https://opentutorials.org/module/4075/24884