在这个例子中,
var a = {address: {postcode: 5085}}
var d = Immutable.Map(a);
在这里,d.get('address')
是不可变的。它的值不能更改为任何其他对象。我们只能使用ImmutableJS的Immutable.Map.set()
函数从现有对象创建一个新对象。
但是,由d.get('address')
引用的对象,即{postcode:5085}
是标准的JavaScript对象。它是可变的。像这样的语句可以改变postcode
的值:
d.get('address').postcode=6000;
如果你再次检查变量d的值,你会发现它已经发生了改变。
console.log(JSON.stringify(d))
这违背了不可变性的原则。
原因在于ImmutableJS数据结构,如List
和Map
,仅将不可变性特性传递给List
/Map
的第一层成员。
因此,如果您有数组内部的对象或者对象内部的数组,并且希望它们也是不可变的,您可以选择Immutable.fromJS
。
var a = {address: {postcode: 5085}}
var b = Immutable.fromJS(a);
b.get('address').postcode=6000;
console.log(JSON.stringify(b));
通过上面的示例,您可以清楚地知道fromJS
如何使嵌套成员不可变。
我希望您了解了Map
和fromJS
之间的区别。祝一切顺利 =)