es6 map和immutable.js map之间有什么区别吗?

时间:2017-09-26 17:52:07

标签: ecmascript-6 immutable.js es6-map

我是immutable.js的新手。来自immutable.js的地图与来自ES6的地图有什么区别吗?如果没有区别,为什么我们需要使用immutable.js?

immutable.js

const { Map } = require('immutable')
const map1 = Map({ a: 1, b: 2, c: 3 })
const map2 = map1.set('b', 50)
map1.get('b') // 2
map2.get('b') // 50

ES6

var myMap = new Map();
myMap.set(NaN, 'not a number');
myMap.get(NaN); // "not a number"

2 个答案:

答案 0 :(得分:5)

当你在Immutable.js地图上运行set,修改它包含的数据时,它将在内存中有一个不同的地址。这意味着您的第一个示例中为map1 !== map2,而相同的代码可能会说使用ES6地图时它们是相同的。

人们真正关心使用不同数据的地图!==的原因是像React,Flux和& Redux都依赖于快速检查状态是否有任何变化。 ===是您可以使用的最快的检查,但它本质上是比较双方参考的内存地址。

如果更改该对象的内容,则内存地址可能仍然相同,因为出于性能原因,Javascript使用浅拷贝。 Immutable.js保证了不变性 - 一个对象无法改变。如果您更改地图,现在它是一张新地图。这意味着===比较总是正确的。

如果您没有使用其中一个状态管理库并且只使用Immutable.js因为它很时髦,那么您可能不必!即使您使用这些库,还有其他方法可以保证不变性 - 我发现dot-prop-immutable提供了我需要的功能并且开销更少。

答案 1 :(得分:0)

ES6中的地图不是一成不变的。
以下是我正在使用es6地图的chrome控制台的屏幕截图

output for map immutability