【问题标题】:Is there any difference between es6 map and immutable.js map?es6 map 和 immutable.js map 有什么区别吗?
【发布时间】:2018-03-08 01:22:52
【问题描述】:

我是 immutable.js 的新手。 immutable.js 的 map 和 ES6 的 map 有什么区别吗?如果没有区别,为什么还要使用 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"

【问题讨论】:

  • 只有一个是不可变的?
  • 这里有一个线索:const map2 = map1.set('b', 50); console.log(map1.get('b')); 在这两个都试试。

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


【解决方案1】:

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

人们真正关心带有不同数据的 Maps 的原因是 !== 是像 React、Flux 和 Redux 这样的工具都依赖于快速检查状态是否发生了任何变化。 === 是您可以使用的最快检查,但它本质上是比较两侧引用的内存地址。

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

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

【讨论】:

    【解决方案2】:

    ES6 中的映射不是不可变的。
    以下是我使用 es6 地图的 chrome 控制台的屏幕截图

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 2016-12-24
      • 2023-03-04
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      • 2010-09-26
      • 2010-10-05
      相关资源
      最近更新 更多