Immutable.js 记录中 toJSON() 和 toObject() 的区别

Immutable.js difference between toJSON() and toObject() on Record

随着 Immutable v4 的发布,发生了一些 api 变化。

toJS(): any 变成了 toJS(): {[key: string]: unknown}

据我了解,它已被 toJSON() 取代,但与 toObject() 有什么区别? documentation 在那个话题上不是很清楚。

toJSON(): TProps
   Shallowly converts this Record to equivalent native JavaScript Object.

toObject(): TProps
   Shallowly converts this Record to equivalent JavaScript Object.

名称可按字面意思取:

toObject 创建 javascript 普通 对象 ,而 toJSON 根据集合类型选择数据类型。

对于 keyed 集合(Record、Map、OrderedMap),toJSON 和 toObject 做同样的事情。

但是,对于列表类型(Lists、Set、OrderedSet),存在差异: toJSON returns 一个数组,而 toObject 生成一个对象,其中键是索引:

List(['a','b']).toJSON()   // ['a', 'b']
List(['a','b']).toObject() // { "1": "a", "2": "b" }