Object.freeze() 和 Object.seal() 是 JavaScript 中用于控制对象属性的两个方法,它们有一些相似之处,但也有重要的区别。
Object.freeze()冻结对象:Object.freeze() 方法会冻结一个对象。冻结对象后,对象的属性不能被添加、删除或修改。此外,对象的属性描述符也不能被更改。深度冻结:Object.freeze() 只会冻结对象的第一层属性。如果对象的属性是对象,那么这些嵌套对象不会被自动冻结。要实现深度冻结,需要递归地对每个嵌套对象调用 Object.freeze()。不可扩展:冻结的对象也是不可扩展的,即不能添加新的属性。示例:
const obj = { prop: 42, nested: { nestedProp: 100 } }; Object.freeze(obj); // 尝试修改属性 obj.prop = 33; // 静默失败,严格模式下会抛出 TypeError obj.newProp = 55; // 静默失败,严格模式下会抛出 TypeError delete obj.prop; // 静默失败,严格模式下会抛出 TypeError // 嵌套对象不会被冻结 obj.nested.nestedProp = 200; // 成功Object.seal()密封对象:Object.seal() 方法会密封一个对象。密封对象后,对象的属性不能被添加或删除,但可以修改现有属性的值。不可扩展:密封的对象也是不可扩展的,即不能添加新的属性。属性描述符:密封对象的属性描述符可以被更改,只要这些更改不涉及添加或删除属性。
示例:
const obj = { prop: 42, nested: { nestedProp: 100 } }; Object.seal(obj); // 尝试修改属性 obj.prop = 33; // 成功 obj.newProp = 55; // 静默失败,严格模式下会抛出 TypeError delete obj.prop; // 静默失败,严格模式下会抛出 TypeError // 嵌套对象不会被密封 obj.nested.nestedProp = 200; // 成功总结Object.freeze():冻结对象,使其属性不可添加、删除或修改,且属性描述符不可更改。Object.seal():密封对象,使其属性不可添加或删除,但可以修改现有属性的值,且属性描述符可以更改。
两者都会使对象不可扩展,即不能添加新的属性。
网友回复
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?