初识Immutablejs菜鸟总结包含JS的基本数据类型和引用数据类型JS的深拷贝和浅拷贝

38次阅读

共计 1416 个字符,预计需要花费 4 分钟才能阅读完成。

这几天公司的 React 项目中有用到 Immutable,自己在对页面中的数据处理上也用到了 Immutable,网上查阅相关资料后,自己做了一些实用的总结吧,参考过的一些不错的文章有:
Immutable 详解及 React 中实践,Immutable 常用 API 简介,Immutable 官方文档

1.Immutable 是什么?

mmutable 数据就是一旦创建,就不能再被更改的数据。对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象。Immutable 实现的原理是 Persistent Data Structure [pəˈsɪstənt ˈdeɪtə ˈstrʌktʃə(r)](持久化数据结构),也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。同时为了避免 deepCopy 把所有节点都复制一遍带来的性能损耗,Immutable 使用了 Structural Sharing(结构共享),即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享。
2. 为什么要使用 Immutable


JavaScript 中的对象(object)、数组(Array)、函数(Function)一般是可变的(Mutable),因为使用了引用赋值,新的对象简单的引用了原始对象,改变新的对象将影响到原始对象。。举个例子 red={a:1}; yellow = red; 如果进行 yellow.a=2 的操作,你会发现 red 中的 a 也变成了 2。可以参考:详解 JS 中的基本数据类型和引用数据类型,JavaScript 的基本数据类型和引用数据类型
虽然这样做可以节约内存,但当应用复杂后,这就造成了非常大的隐患,Mutable 带来的优点变得得不偿失。为了解决这个问题,一般的做法是使用 shallowCopy(浅拷贝)或 deepCopy(深拷贝)来避免被修改,但这样做造成了 CPU 和内存的浪费。可以参考:JavaScript 深拷贝(deep copy)和浅拷贝(shallow copy)
3.Immutable 的数据类型


常用的有两种数据类型分别是:
List: 有序索引集,类似 JavaScript 中的 Array。
Map: 无序索引集,类似 JavaScript 中的 Object。
下面的用的比较少,很少接触:
OrderedMap: 有序的 Map,根据数据的 set()进行排序。
Set: 没有重复值的集合。
OrderedSet: 有序的 Set,根据数据的 add 进行排序。
Stack: 有序集合,支持使用 unshift()和 shift()添加和删除。
Range(): 返回一个 Seq.Indexed 类型的集合,这个方法有三个参数,start 表示开始值,默认值为 0,end 表示结束值,默认为无穷大,step 代表每次增大的数值,默认为 1. 如果 start = end, 则返回空集合。
Repeat(): 返回一个 vSeq.Indexe 类型的集合,这个方法有两个参数,value 代表需要重复的值,times 代表要重复的次数,默认为无穷大。
Record: 一个用于生成 Record 实例的类。类似于 JavaScript 的 Object,但是只接收特定字符串为 key,具有默认值。
Seq: 序列,但是可能不能由具体的数据结构支持。
Collection: 是构建所有数据结构的基类,不可以直接构建。
4.immutable 常用 Api:
Immutable 常用 API 简介,Immutable 文档


参考:

正文完
 0