const 定义的对象里面的属性值允许修改的(const定义中的不变指的是指向对象的指针不变,因为修改对象中的属性并不会让指向对象的指针发生改变,所以可以改变const定义对象的属性。
)
怎么做到不修改const定义的对象的值呢?
//对象冻结
function constFun(obj){
//对象冻结 Object.isFrozen(obj)
if(Object.isFrozen(obj)){
return obj
}
//1,Reflect.ownKeys(obj);2,Object.keys(obj)获取对象key值的方法
Object.keys(obj).forEach(key=>{
//深拷贝,深度冻结
typeof obj[key]==="object"&&(obj[key]=constFun(obj[key]))
})
return Object.freeze(obj)
}
本文探讨了JavaScript中const定义的对象如何允许其属性值被修改,以及如何通过深度冻结实现真正不可变的对象。介绍了`Object.isFrozen()`方法和递归冻结对象的策略,确保对象及其所有嵌套属性不可变。
581

被折叠的 条评论
为什么被折叠?



