我应该在ES2015中将可变数组/对象声明为const吗?

时间:2016-03-30 10:37:53

标签: javascript ecmascript-6

如果它是一个不可变对象,那么我毫不怀疑将它声明为const。 但在这种情况下,它只是对象的const引用,而对象在代码中稍后被修改。

const styles = {};
...
styles.width = rect.width + 'px';

我担心阅读此代码的开发人员会感到困惑。 感觉let更适合变异的对象。

1 个答案:

答案 0 :(得分:2)

这可能是一个你无法得到最终答案的问题,因为它是基于意见的。

一些历史背景可以帮助理解令人困惑的const如何成为第一位:

Allan Wirfs-Brock, the former editor of the EcmaScript spec, himself said:

  

在稍微不同(也许更好)的Universe中,ECMAScript const声明将被命名为let并引入SSA绑定。

并问,为什么情况并非如此,he responded

  

让/ const是来自ES4提案和Moz JS1.7

的结转      

TC39从未认真研究过命名备选方案

所以你可以说const有点用词不当,因为它不会做那些不熟悉它的人可能会做的事情。

由于const按照它的方式工作,并且几乎肯定不会改变,我仍会使用const 定义您的对象。

这可能会帮助那些不熟悉const工作方式的人更好地理解。

也许在第一次出现const时添加一个带有对象的注释可能会有所帮助,如下所示:

// Important: 'const' only ensures that 'styles' always references the same object,
// it does not render it immutable
const styles = {};

但意见可能会有所不同。