首页 > web前端 > js教程 > 正文

JS对象冻结方法_不可变对象创建

紅蓮之龍
发布: 2025-11-20 21:36:06
原创
291人浏览过
对象冻结是使对象不可变的操作,Object.freeze()可防止属性增删改及配置修改,但仅浅层生效;若属性为引用类型,需通过递归实现深度冻结,如封装deepFreeze函数;可用Object.isFrozen()检测是否冻结,适用于配置保护、状态管理等场景。

js对象冻结方法_不可变对象创建

在JavaScript中,创建不可变对象是保证数据安全和程序稳定的重要手段。其中,Object.freeze() 方法是最常用的方式之一。它能防止对象的属性被修改、添加或删除,从而实现浅层冻结,帮助我们创建不可变对象。

什么是对象冻结?

对象冻结是指让一个对象进入一种不可变状态。使用 Object.freeze(obj) 后:

  • 不能添加新属性
  • 不能删除现有属性
  • 不能修改属性的值(如果是数据属性)
  • 不能重新配置属性描述符

需要注意的是,freeze 是浅冻结,也就是说,如果对象的某个属性是引用类型(如数组或其他对象),其内部仍然可以被修改。

示例:

const user = {
  name: 'Alice',
  profile: {
    age: 25
  }
};

Object.freeze(user);
user.name = 'Bob'; // 无效,严格模式下会报错
user.email = 'alice@example.com'; // 添加失败

user.profile.age = 30; // 成功!因为 profile 是对象,未被冻结
console.log(user.profile.age); // 输出:30
  
登录后复制

如何实现深度冻结?

为了真正实现不可变对象,需要递归地冻结所有嵌套对象。可以封装一个深度冻结函数:

Booltool
Booltool

常用AI图片图像处理工具箱

Booltool 140
查看详情 Booltool

function deepFreeze(obj) {
  // 获取所有属性并遍历
  Object.getOwnPropertyNames(obj).forEach(prop => {
    const value = obj[prop];
    // 如果属性是对象且存在,继续冻结
    if (value && typeof value === 'object' && !Object.isFrozen(value)) {
      deepFreeze(value);
    }
  });
  return Object.freeze(obj);
}

// 使用示例
const config = {
  api: 'https://api.example.com',
  headers: {
    'Content-Type': 'application/json'
  }
};

deepFreeze(config);
config.headers['Authorization'] = 'token'; // 无效
console.log(config.headers.Authorization); // undefined
  
登录后复制

冻结后的对象如何检测?

可以使用 Object.isFrozen() 来判断一个对象是否已被冻结:

console.log(Object.isFrozen(user));     // true(浅冻结)
console.log(Object.isFrozen(config));   // true(深冻结后)
console.log(Object.isFrozen({}));       // false
  
登录后复制

注意:对 null、原始类型调用该方法会直接返回 true,因为它们无法被修改。

冻结的实际应用场景

  • 配置对象保护:防止运行时意外修改全局配置
  • Redux 状态管理:配合不可变更新策略,确保 state 不被直接修改
  • 常量定义:定义应用中的常量结构,避免误操作
  • API 响应缓存:冻结响应结果,防止后续逻辑篡改原始数据

基本上就这些。Object.freeze() 是构建健壮应用的有力工具,尤其在强调不可变性的编程模式中非常实用。虽然它只做浅冻结,但通过简单的递归封装就能满足大多数深度不可变需求。关键是理解它的限制,并在必要时手动补全深度控制逻辑。不复杂但容易忽略细节。

以上就是JS对象冻结方法_不可变对象创建的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号