Object.freeze() 冻结对象
const是禁止修改指向,而不是不能改值,由于常量的修改是直接赋值,所以使用const声明的变量是无法修改的。
但是object却是可以修改的,我们可以对这个object对象写入数据,那如果我们要禁止这个对象被读写呢?
我们可以利用Object.freeze()
方法来实现。
const obj = {
one : 1
}
一般我们可以通过obj.one = xx
来修改值,现在我们要防止这个值被修改:
const obj = Object.freeze({
one : 1
})
obj.one = 5;
console.log(obj) //{one:1}
无法被修改。
但是还有一种情况,就是如果这个one是一个对象呢,几遍我们给obj冻结了,one依旧可以被修改到,所以最好的办法就是进行一次遍历
let obj = {
one : { two: 2}
}
var freeze = (obj) => {
Object.freeze(obj);
Object.keys(obj).forEach((key,i) =>{
if(typeof obj[key] === "object"){
Object.freeze(obj[key]);
}
});
};
freeze(obj);
通过Object.keys获取到对象所有的key的数组,forEach遍历这个数组,然后判断对象里面key对应的值是否为object,如果是就冻结它。
这样一来对象里面的子级对象就不能被修改了,但是子级里面的子级如果是一个对象,依旧可以被修改,这个就看需求了,真的需要,你在遍历一下也不是不行。设置不行可以用其他办法,我记得有一个Object的方法,即可以拿来做监控,又能禁止写入呢。
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据