对象扩展
Object.preventExtensions
:使对象不可扩展,也就是永远不能再添加新的属性
Object.isExtensible
:判断一个对象是否是可扩展
const obj = {
name: "云牧"
}
const newObj = Object.preventExtensions(obj);
console.log(obj === newObj); // 返回 true,代表是将原对象变的不可扩展,并且返回原对象
// 添加新属性无效
obj.age = 18;
console.log(obj); // { name: '云牧' }
console.log(Object.isExtensible(obj)); // false
对象的封闭
Object.seal
:阻止添加新属性+属性标记为不可配置(现有属性值可以修改)
Object.isSealed
:检查一个对象是否被密封
const obj = {
name: "云牧",
};
Object.seal(obj);
// 添加新属性无效
obj.age = 18;
// 删除属性无效
delete obj.name;
// 修改现有属性有效
obj.name = "黛玉";
console.log(obj); // { name: '云牧' }
console.log(Object.isSealed(obj)); // true
对象的冻结
Object.freeze
:不加新属性+不可配置+不能修改值
Object.isFrozen
:检查一个对象是否被冻结
const obj = {
name: "云牧",
};
Object.freeze(obj);
// 添加新属性无效
obj.age = 18;
// 删除属性无效
delete obj.name;
// 修改现有属性无效
obj.name = "黛玉";
// defineProperty报错
// Object.defineProperty(obj, "name", {
// value: "林怼怼",
// });
console.log(obj); // { name: '云牧' }
console.log(Object.isFrozen(obj)); // true