相对java
,.net
之类的强类型语言,js
有一点很大的区别就是,数据结构只有array
与object
,并且都是动态可变的,而java
有List, Set, Map
等数据结构。所以,为了能在js
中也使用这些数据结构,immutable-js就应运而生。
1. immutable-js
immutable-js
扩充了JavaScript中的不可变集合,即一旦创建就不能改变的数据类型。这样可简化应用开发,无防御复制,启用更先进的内存方案,以及使用更简单的逻辑检查更新。持久化数据提供可修改的API,这些API不在原地更新数据,而是产生新的更新后的数据。
2.提供的数据类型
List
:有序索引集合,类似JavaScript中的数组Map
:无序键值对((key,value)pairs)集合OrderedMap
:有序的Map
Set
:无重复值的集合OrderedSet
:有序的Set
Stack
:支持元素添加和移除的索引集合Range()
:返回一个从start
到end
,步长填充step
的Seq.Indexed
集合,start
默认值为0
,step
默认值为1
,end
默认为无穷大。如果start = end
,则返回空集合。Repeat()
:返回一个用value
重复times
次的Seq.Indexed
集合。如果times
未定义,则返回无限value
值的Seq
集合。Record
:类似于JavaScript的Object,但是只是接收特定字符串为key
,并有默认值Seq
:允许不通过中间集合让高阶集合函数(如map, filter
)高效链式调用的惰性操作集合Collection
:所有数据结构的基类
更多数据类型参考。
3.提供的API
3.1 fromJS
:将一个js数据转换为immutable-js类型的数据
const { fromJS, isKeyed } = require('immutable@4.0.0-rc.9');fromJS({ a: {b: [10, 20, 30]}, c: 40}, function (key, value, path) { console.log(key, value, path) return isKeyed(value) ? value.toOrderedMap() : value.toList()})> "b", [ 10, 20, 30 ], [ "a", "b" ]> "a", {b: [10, 20, 30]}, [ "a" ]> "", {a: {b: [10, 20, 30]}, c: 40}, []
详情参考。
3.2 is
:对两个对象进行比较
const { Map, is } = require('immutable@4.0.0-rc.9')const map1 = Map({ a: 1, b: 1, c: 1 })const map2 = Map({ a: 1, b: 1, c: 1 })assert.equal(map1 !== map2, true)assert.equal(Object.is(map1, map2), false)assert.equal(is(map1, map2), true)
详情参考。
在这里给大家分享一下,我是一名5年前端工程师,自己建了一个q群:731771211 ,群里不停更新最新的教程和学习方法,加入一起学习与交流