Immutable.List似乎不会阻止您将其视为可变数组:
const Immutable =require( 'immutable');
const l = Immutable.List([1,2,3,4,5]);
l[4] = 9;
console.log(l[4], l.get(4)) // outputs 9, 5这似乎令人惊讶,并且似乎没有在文档中得到解决。
我在这里误解了什么?我曾想象过Immutable.JS会以某种方式保护您不受变化的影响,但我认为它需要您坚持使用定义的API才能获得这些好处?
发布于 2021-04-29 15:42:04
您可以尝试查看列表的属性,以了解发生了什么:

您的代码所做的并不是修改索引4处的项,而是向对象添加一个键为"4“的新属性。
发布于 2021-04-29 15:43:45
它看起来像是不可变在内部处理不可变性。如果您在代码的末尾记录该列表本身,则会显示为
List {
'4': 9,
size: 5,
_origin: 0,
_capacity: 5,
_level: 5,
_root: null,
_tail: VNode { array: [ 1, 2, 3, 4, 5 ], ownerID: undefined },
__ownerID: undefined,
__hash: undefined,
__altered: false
}因此,当您使用l[4] = 9时,实际上是向list对象添加了一个新属性,而不是list的内部表示。
如果您使用
Object.freeze(l)在调用之前,它就能正常工作
https://stackoverflow.com/questions/67312820
复制相似问题