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)
}