精读《Records & Tuples 提案》
ascoders opened this issue · 2 comments
ascoders commented
也许你觉得 js 通过 immutablejs、immer 等库已经很好的支持了 immutable,但看下面这个问题:
你在控制台看到应用数据从
{ a: 1 }
变成了{ a: 1}
,能解读出什么?这两个对象是否相同完全取决于引用是否相同,但引用是否相同我们根本看不出来,这取决于如何实现的。也就是说,{ a: 1} === { a: 1 }
或者{ a: 1} !== { a: 1 }
都有可能。
对,就是这个问题,在现在 js 是无解的。你可以保证 “我实现严格遵循 immutable”,但我反问 “鬼知道你的实现有没有问题??”,稍微不小心写个默认值就会导致一个新引用 obj ?? []
,谁敢保证不犯错呢?
https://github.com/tc39/proposal-record-tuple 解决的就是这个问题,它让肉眼看上去的相等绝对相等: #{ a: 1 } === #{ a: 1}
,原因是通过 #
符号填补了之前隐晦的引用关系。
LastKnightCoder commented
ascoders commented