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 会跳过响应式代理,渲染快一截

相关推荐
子非鱼a5 小时前
【WEB】multiSQL
前端
lemon_sjdk6 小时前
DOM 节点
java·前端·javascript
nvd116 小时前
深入现代 Web 鉴权架构:网关统一代理 (Forward-Auth) vs 前端持有 JWT 的终极选型与边缘同域实践
前端·架构·状态模式
leoZ2316 小时前
2026-09-09-springboot-cloud-deploy-pitfalls
java·前端·javascript·vue.js·人工智能·spring boot·后端
YWL7 小时前
OpenLayers弹窗Overlay深度实战
前端·vue·openlayers
YWL7 小时前
OpenLayers+ECharts联动:地图点击联动图表,数据可视化大屏方案
前端·信息可视化·vue·echarts·openlayers
芭拉拉小魔仙7 小时前
Vue 2 门诊收费系统中的医保结算流程设计与实践
前端·javascript·vue.js
moonrailgun7 小时前
用 Node.js 复刻 Codex Astra 的终端星光
前端·javascript·算法
海上彼尚8 小时前
Cursor 模型的强度实测排行
前端·人工智能·后端
默_笙8 小时前
💫 给金鱼建图书馆(下):Milvus 向量数据库,让 AI 拥有长期记忆
前端·javascript