Object.freeze()注意事项

Object.freeze():运行时的锁

js 复制代码
const config = { apiKey: 'sk-xxxxxx', timeout: 5000 }; 

Object.freeze(config);

config.timeout = 3000;
console.log(config.timeout); // 5000,没变(严格模式会抛 TypeError)

但 freeze 有个暗坑:只锁表面

js 复制代码
const config = { 
    env: 'production', 
    db: { host: '127.0.0.1', port: 3306 } 
}; 

Object.freeze(config); 

config.db.port = 5432; 
console.log(config.db.port); // 5432 ------ 改成功了

config.db 的引用 被冻住了,但 db 对象本身没有被冻结,内部属性随便改。

所有需要有深层的冻结,只能手写一个方法实现

js 复制代码
function deepFreeze(obj) { 
    Object.getOwnPropertyNames(obj).forEach(key => { const val = obj[key]; 
        if (val && typeof val === 'object') deepFreeze(val);
    }); 
    return Object.freeze(obj); 
} 
deepFreeze(config); 
config.db.port = 5432; // 失效 console.log(config.db.port); // 3306

性能优化点

传入前 Object.freeze(),Vue 会跳过响应式代理,渲染快一截

相关推荐
ss27310 分钟前
AI全栈实战 | 3.5-01 Python 全栈前端最小集:不会 React 也能做出能看的后台,关键就一条线
前端·python·react.js
人工智能培训13 分钟前
数字孪生驱动大模型工业知识库:为具身机器人植入领域专业经验
大数据·linux·服务器·前端·人工智能
维克兜率天27 分钟前
【维克】通道突破:画出趋势的“轨道线“
前端·数据库·人工智能
Ai-_Man28 分钟前
从聊天框到正式文档:AI导出鸭瞄准AI大模型应用的“最后一公里”
开发语言·前端·javascript·人工智能·小程序
乌暮36 分钟前
拆解网页的底层逻辑:用费曼学习法讲透 HTML 与 CSS
前端·css·学习·html
专业程序开发源39 分钟前
springboot酒店会员点餐系统22339-计算机课程设计、毕业设计
java·javascript·vue.js·spring boot·后端·php·课程设计
panxianren8 小时前
Bun 1.4 的 bun test --parallel 将 4 秒的测试套件缩短到约 1 秒
java·javascript
陈随易10 小时前
bm2,Node.js 与 Bun 项目部署新选择
前端·后端·程序员
可乐鸡翅yeah_11 小时前
FFmpeg 生成 HLS 独立分片 independent‑segments 参数到底有什么用
javascript·ffmpeg·音视频·safari·m3u8
福兮说11 小时前
canvas 旋转图片的六个坑:四角被裁、Math.ceil 多出 1px 黑边、JPG 角发黑、翻转方向反了
前端·javascript·图像处理·canvas