最佳答案
const 是什么意思?
如果使用 const
关键字声明变量,则意味着无法为其分配新值。这并不意味着您无法修改它。改变对象的属性就是修改。
解决方案
如果你不想改变一个对象,你可以使用 Object.freeze()
let someObj = {};
someObj.prop = 1; //setting prop to '1'
Object.freeze(someObj); //after this line you can't modify object
someObj.prop = "changed"; //prop will remain '1'
console.log(someObj)
注意: Object.freeze()
是浅卡住,意味着如果存在嵌套对象,它们仍然可以被修改。考虑下面的例子。
const obj = {
upper:"something",
nested:{
nestProp:"this is nest prop"
}
}
Object.freeze(obj);
obj.upper = 'new' //can't be changed
obj.nested.nestProp = 'new' //will be changed
console.log(obj)
现在这个问题可以使用递归来解决。
function completeFreeze(obj){
Object.freeze(obj);
for(let key in obj){
if(typeof obj[key] === "object"){
completeFreeze(obj[key])
}
}
}
const obj = {
upper:"something",
nested:{
nestProp:"this is nest prop"
}
}
completeFreeze(obj);
obj.nested.upper = 'new' //will not be changed
console.log(obj)
关于javascript - 为什么常量的属性或值不是常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56103006/