1、Object.seal()
使用Object.seal()可以防止向一个对象添加属性和删除属性,但是可以更改属性
<script>
let person={
name:'testName',
age:'testAge'
};
Object.seal(person);
//可以更改
person.name='changeName';
//不能删除
delete person.age;
//不能添加
person.skill='study';
console.log(person);
</script>
输出结果
如果使用严格模式(use strict),执行添加和删除操作会直接报错
2、使用Object.freeze冻结对象
Object.freeze可以阻止对一个对象属性的更改
<script>
let person={
name:'testName',
age:'testAge'
};
Object.freeze(person);
//不可以更改
person.name='changeName';
console.log(person);
</script>
输出
seal和freeze结合,一个对象将不可添加删除属性以及更改属性。
3、Object.defineProperty
使用Object.defineProperty可以将单个属性冻结
let person={
name:'testName',
age:'testAge'
};
Object.defineProperty(person,'name',{
writable:false,//不可写
enumerable:false//不可遍历
});
person.name='changedName';
console.log(person);
for(let i in person){
console.log(i,person[i])
}
可以通过Object.isFrozen,Object.isSealed,Object.isExtensible判断当前对象的状态