ecmascript-6 - es6 map 和 immutable.js map 有什么区别吗?

标签 ecmascript-6 immutable.js es6-map

我是 immutable.js 的新手。 immutable.js 中的 map 和 ES6 中的 map 之间有什么区别吗?如果没有区别,为什么我们需要使用immutable.js?

不可变的.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"

最佳答案

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

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

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

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

关于ecmascript-6 - es6 map 和 immutable.js map 有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46432895/

相关文章:

javascript - 如何使用 ImmutableJS 更新 List 中的元素?

javascript - 如何在 Immutable.Map({}) 中更改 ImmutableList({}) 中项目的属性

javascript - 更高的性能 - Map.prototype.forEach 还是 for..of?

javascript - 与 Map 相比,使用 Object.create(null) 有什么优势吗?

javascript - react : How to show Error Message if no data is found in obj

javascript - 在 Javascript 中过滤后将事件标志替换为下一项

javascript - 使用 map 传播语法不起作用

javascript - typescript 。如何从对象的值中获取对象的属性名称?

javascript - react - 类型错误 : Cannot read property 'map' of undefined

javascript - Jest 箭头语法导致错误