位置: 编程技术 - 正文

Immutable 在 JavaScript 中的应用

编辑:rootadmin

推荐整理分享Immutable 在 JavaScript 中的应用,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

Mutable 对象在 JavaScript 中,对象是引用类型的数据,其优点在于频繁的修改对象时都是在原对象的基础上修改,并不需要重新创建,这样可以有效的利用内存,不会造成内存空间的浪费,对象的这种特性可以称之为 Mutable,中文的字面意思是「可变」。对于 Mutable 的对象,其灵活多变的优点有时可能会成为其缺点,越是灵活多变的数据越是不好控制,对于一个复杂结构的对象来说,一不小心就在某个不经意间修改了数据,假如该对象又在多个作用域中用到,此时很难预见到数据是否改变以及何时改变的。

针对这种问题,常规的解决办法可以通过将对象进行深拷贝的形式复制出一个新的对象,再在新对象上做修改的操作,这样能确保数据的可控性,但是频繁的复制会造成内存空间的大量浪费。

Immutable 对象为了能更好的解决上述的问题,出现了 Immutable 对象,Immutable 从字面上翻译成中文是「不可变」。每次修改一个 Immutable 对象时都会创建一个新的不可变的对象,在新对象上操作并不会影响到原对象的数据。这种特殊的对象并不是 JavaScript 新出的功能特性,而是业界为了解决这种问题提供的一套解决方案,并且涌现出了一些优秀的开源类库,其中最有名的就是 Facebook 的 Lee Byron 开源的 immutable.js。当然,Immutable 的这种解决方案并不是独创的,而是来源于 Clojure 和 Scala。Mutable 和 Immutable 的性能对比对于 Mutable 的对象的低效率操作主要体现在复制和比较上,而 Immutable 对象就是解决了这两大低效的痛点。普通的 Mutable 对象的深拷贝操作会将一整份数据都复制一遍,而 Immutable 对象在修改数据时并不会复制一整份数据,而是将变化的节点与未变化的节点的父子关系转移到一个新节点上,类似于链表的结构。从 “复制” 的角度来看,做到了最小化的复制,未变化的部分都是共享的,Mutable 在复制的时候是 “全量”,而 Immutable 复制的是 “增量”,对于内存空间的使用率的比较高低立判。并且基于每次修改一个 Immutable 对象都会创建一个新的 Immutable 对象的这种特性可以将数据的修改状态保存成一组快照,这也是挺方便的。再来说说比较操作。对于 Mutable 的对象,如果要比较两个对象是否相等,必须遍历对象的每个节点进行比较,对于结构复杂的对象来说,其效率肯定高不到哪去。对于 Immutable 对象,immutable.js 提供了直接判断两个 Immutable 对象的「值」是否相等的 API。

在实际的开发应用中,性能并不总是最关键和重要的,对于普通的 JavaScript 的项目来说,由于 Immutable 的特性带来的数据的可控性比起性能来说更有优势,对于 Mutable 对象适合在封闭的作用域小范围使用,而 Immutable 对象适合数据需要跨多个作用域传递时使用。

Immutable 在 JavaScript 中的应用

Mutable 和 Immutable 在使用上的区别

immutable.js 提供了多种 Immutable 的数据结构:包含了 List Stack Map OrderedMap Set OrderedSet Record,这些数据结构与原生的 Mutable 的数据结构大致对应。各数据结构的用法这里不细说,主要说说 Immutable 对象与 Mutable 对象在使用上的区别吧。原生的 Mutable 对象在「读」和「写」上非常方便。

而 Immutable 对象需要通过 set 和 get 来对数据进行「读」和「写」。

上面的例子为了说明 set 方法的使用才在一开始创建了一个空对象,实际上可以在实例化的时候传初始值。

对于层级比较深的数据,immutable.js 提供的访问接口很方便。

如果是原生的 Mutable 对象,在链式访问一个深层级的数据时可能会报对象 undefined 的错误,而 Immutable 对象在碰到这种情况时不会报错,返回的是 undefined。在调试的时候,如果想查看一个 Immutable 对象的内部结构,建议使用 toJSON() 先转换为普通的 Mutable 对象。

搞定immutable.js详细说明 什么是ImmutableDataImmutableData是指一旦被创造后,就不可以被改变的数据。通过使用ImmutableData,可以让我们更容易的去处理缓存、回退、数据变化检测等

JS基于clipBoard.js插件实现剪切、复制、粘贴 摘要:最近做了一个项目,其中有这样一需求:实现一个点击按钮复制链接的功能,通过网上找相关资料,找到了几个插件,ZeroClipboard是通过flash实现

深入浅析Bootstrap列表组组件 Bootstrap,来自Twitter,是目前最受欢迎的前端框架。Bootstrap是基于HTML、CSS、JAVASCRIPT的,它简洁灵活,使得Web开发更加快捷。列表组是灵活又强大的组件,

标签: Immutable 在 JavaScript 中的应用

本文链接地址:https://www.jiuchutong.com/biancheng/369933.html 转载请保留说明!

上一篇:基于javascript数组实现图片轮播(基于javascript数独游戏论文参考文献)

下一篇:搞定immutable.js详细说明

  • 诚信纳税的含义是什么
  • 实质课税原则是税法基本原则吗
  • 柴油车尾气处理液会计分录
  • 个人所得税分摊方式月扣除金额修改
  • 怎么把预付账款转到管理费用
  • 企业构建固定资产支付的现金应列示在现金流量表
  • 私对公转账可以撤回吗
  • 无法支付的应付账款转销
  • 新税法下广告费和业务宣传费的扣除是怎样?
  • 退回多打货款分录
  • 按简易办法计税销售额税率
  • 资本化支出加计摊销形成的差异
  • 企业向银行贷款需要什么条件
  • 个人所得税生产经营所得税率表2023
  • 小微企业附加税减半
  • 现金支票怎么背书转让
  • 一般纳税人注销库存需要补交税吗
  • 3%增值税专用发票可以抵扣多少
  • 可全额扣除的公益性捐赠支出
  • 一台设备发票开来0.5台怎么做账?
  • 1697510605
  • 商品残次品怎样定义
  • 先扣社保再发工资可以吗
  • 公司工会需要单独做账么
  • 如何删除驱动器里面的文件
  • php中常用的数组是什么
  • php远程调用
  • window10为什么没有本地用户和组
  • 新成立股份有限公司股本构成
  • 固定资产更新改造支出计入什么科目
  • PHP:session_cache_expire()的用法_Session函数
  • 对于在某一时点履行义务,企业应当在
  • php注册功能的实现
  • 公司增资怎么需要什么资料
  • 办公楼需要什么
  • nerf 怎么瞄准
  • 非营利组织增值税
  • vue3微前端
  • javaweb实例教程
  • javaweb实现用户登录注册
  • dematel模型有什么缺点
  • ChatGPT可以做什么
  • php执行命令的函数
  • 会计备案报送期间
  • 劳务报酬什么情况下可以退税
  • 专项应付款的账务处理
  • 资产超过5000万的家庭有多少
  • 专项扣除三险一金是哪三险
  • 个体户开票超过多少认定为小规模
  • mysql分片sql
  • 应付账款重分类是什么意思
  • 税金及附加是什么科目编号
  • 未实现内部交易损益是什么意思
  • 直接私募如何纳税
  • 租户押金抵房租
  • 公司收入和开支比例
  • 待抵扣进项税额和待认证进项税额的区别
  • 退税勾选选成抵扣勾选怎么办
  • 税控盘开具发票怎么冲红?
  • mysql 存储过程存放在哪里
  • 设置共享时可使用的权限
  • win8.1无法启动
  • win8怎么共享电脑
  • linux命令速记
  • seg是什么文件
  • win10预览版桌面图标和任务栏不翼而飞怎么办?
  • [置顶] 关于UNITY5.0和高通AR4.2.3在手机上白屏的问题
  • jquery简单例子
  • 打开指定文件夹命令
  • Node.js中的construct构造函数
  • android车载导航刷机包
  • shell脚本实现文件移动、复制等操作
  • 猫的合集
  • vue中的计算属性forEach函数的使用
  • javascript获取html元素的方法
  • 税务申报显示重名怎么办
  • 海珠税务局许丰
  • 张雪峰谈建筑专业
  • 如何查询甘肃省清产核资系统扶贫项目资产金额
  • 国税工作人员工资标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设