immutable在javascript中的应用_javascript技巧

immutable在javascript中的应用_javascript技巧

ID:31191907

大小:68.50 KB

页数:3页

时间:2019-01-07

immutable在javascript中的应用_javascript技巧_第1页
immutable在javascript中的应用_javascript技巧_第2页
immutable在javascript中的应用_javascript技巧_第3页
资源描述:

《immutable在javascript中的应用_javascript技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

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

2、arobj={/*一个复杂结构的对彖*/};doSomething(obj);//上面的函数之行完后,此时的obj还是最初的那个obj吗?针对这种问题,常规的解决办法可以通过将对象进行深拷贝的形式复制出一个新的对象,再在新对彖上做修改的操作,这样能确保数据的可控性,但是频繁的复制会造成内存空间的大量浪费。varobj={/*一个复杂结构的对象*/};//copy出一个新的obj2//但是copy操作会浪费内存空间varobj2二deepClone(obj);doSomething(obj2);//上面的函数之行完后,无论obj2

3、是否变化,obj肯定还是原來那个objImmutable对象为了能更好的解决上述的问题,出现了Immutable对象,Immutable从字而上翻译成中文是「不可变」。毎次修改一个Immutable对彖时都会创建一个新的不可变的对象,在新对象上操作并不会影响到原对象的数据。这种特殊的对象并不是JavdScript新出的功能特性,而是业界为了解决这种问题提供的一套解决方案,并且涌现出了一些优秀的开源类库,其中最有名的就是Facebook的LeeByron开源的immutable.jso当然,Immutable的这种解决方案并不是独

4、创的,而是来源于Clojure和Scala。Mutable和Immutable的性能对比对于Mutable的对象的低效率操作主要体现在复制和比较上,而Immutable对象就是解决了这两大低效的痛点。普通的Mutable对象的深拷贝操作会将一整份数据都复制一遍,ifljImmutable对彖在修改数据时并不会复制一整份数据,而是将变化的节点与未变化的节点的父子关系转移到一个新节点上,类似于链表的结构。从“复制”的角度来看,做到了最小化的复制,未变化的部分都是共享的,Mutable在复制的时候是“全量”,而Immutable复制的

5、是“增量”,对于内存空间的使用率的比较高低立判。并且基于每次修改一个Immutable对象都会创建一个新的Immutable对象的这种特性可以将数据的修改状态保存成一组快照,这也是挺方便的。再來说说比较操作。对于Mutable的对象,如果要比较两个对象是否相等,必须遍历对象的每个节点进行比较,对于结构复杂的对象来说,其效率肯定高不到哪去。对于Immutable对象,immutable,js提供了直接判断两个Immutable对彖的「值」是否相等的APIovarmapl=Immutable・Map({a:1,b:1,c:1});v

6、armap2=Immutablc.Map({a:1,b:1,c:1});assert(mapl!==map2);//不同的Immutable实例,此时比较的是引用地址assert(Immutable,is(mapl,map2));//mapl和map2的值相等,比较的是值assert(mapl.equals(map2));//与Immutable,is的作用一样在实际的开发应用中,性能并不总是最关键和重要的,对于普通的JavaScript的项目來说,由T*Immutable的特性带來的数据的可控性比起性能來说更有优势,对T*Mu

7、table对彖适合在封闭的作用域小范围使用,而Immutable对彖适合数据需要跨多个作用域传递时使用。Mutable和Immutable在使用上的区别immutable,js提供了多种Immutable的数据结构:包含了ListStackMapOrdercdMapSetOrdercdSctRecord,这些数据结构与原生的Mutable的数据结构大致对应。各数据结构的用法这里不细说,主要说说Iminutable对象与Mutable对象在使用上的区别吧。原生的Mutable对象在「读」和「写」上非常方便。varmutableOb

8、j={};//写入数据mutableObj.foo二'bai?;//读取数据consolc.logGnutablcObj・foo);jfljImmutable对象需要通过set和get来对数据进行「读」和「写」。varimmutableObjl=Immutabl

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。