const宣告常量并不會真的不能改變,只是const變數后保存的那個值不會改變, 如果那個值是地址值的話, 只能保證地址值不會改變, 但是地址值指向的物件內部的改變, const表示它管不著,
對于物件,可以使用凍結的方法使它無法被改變
<script>
var a = {
name: 'sas',
b: {
nob: 13
}
}
// Object.freeze(a)
a.name = 'aaa'
// 凍結后修改物件的屬性并沒有作用
console.log(a.name)
a.b.nob = 14
// 但是只能凍結表層, 如果屬性還是一個物件的話,并沒有凍結
console.log(a.b.nob)
function freeObj(obj) {
Object.freeze(obj)
Object.keys(obj).forEach(o => {
// type of物件是小寫的object字串
if(typeof obj[o] == 'object'){
freeObj(obj[o])
}
})
}
freeObj(a)
a.b.nob = 15
// 并沒有被修改,說明全部被凍結
console.log(a.b.nob)
</script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282381.html
標籤:其他
