Javascript 对象或数组的首选声明约定是:const还是let?

Javascript 对象或数组的首选声明约定是:const还是let?,javascript,standards,tslint,Javascript,Standards,Tslint,我不是在问什么在技术上是可能的;我知道你能行 const a = []; const b = {}; a.push['sup']; b.test = 'earth'; 我想知道的是,对于将修改其内部结构的数组和对象,是否有任何惯例将let优先于const。如果您看到一个用const声明的对象,您是否认为该对象是不可变的,您是否更愿意看到let,或者,由于某些linter(如tslint)对此有问题,用const声明它并相信其他阅读代码的人都知道这并不意味着它是不可变的,这样更好吗?对象前面的c

我不是在问什么在技术上是可能的;我知道你能行

const a = [];
const b = {};
a.push['sup'];
b.test = 'earth';

我想知道的是,对于将修改其内部结构的数组和对象,是否有任何惯例将
let
优先于
const
。如果您看到一个用
const
声明的对象,您是否认为该对象是不可变的,您是否更愿意看到
let
,或者,由于某些linter(如tslint)对此有问题,用
const
声明它并相信其他阅读代码的人都知道这并不意味着它是不可变的,这样更好吗?

对象前面的
const
关键字意味着存在一个对象,您正在使用引用来修改它。它还(正确地)暗示您不应该尝试重新分配对此对象的引用

const obj = {a: 'foo', b: 'bar'};

const obj2 = {z: 'baz'};

obj = obj2; // const will prevent this operation. 
const
并不意味着不应更改对象属性。这确实意味着您不应试图更改引用。

如果计划重新分配对对象的引用,则使用
let


来源:

没有首选,它取决于您对该数组或对象的使用选择。你必须清楚地理解突变和重新分配

变异-更新内存中的值

重新分配-清除旧值并将新值放入内存中

Let-提供突变和重新分配功能

Const-提供突变但不重新分配

两者都-不提供重新澄清的功能

如果你的用例只需要变异,你可以选择常量。。如果你需要重新分配,那就让我来吧

//让
让调味品=[‘番茄酱’、‘酱油’、‘沙拉茶’];
//可能突变
调味品[0]=“蛋黄酱”;
console.log(调味品);//=>[‘蛋黄酱’、‘酱油’、‘沙拉茶’]
//可能的重新分配
调味品=[‘蛋黄酱’];
console.log(调味品);//=>[“梅奥”]
//重新声明不可能
//让调味品=[]/=>语法错误:标识符“调味品”已声明
//常数
康斯特餐具=[‘叉子’、‘筷子’、‘斯波克’];
//可能突变
器皿[2]=“勺子”
console.log(餐具);//=>[“叉子”、“筷子”、“勺子”]
长度=0
console.log(餐具);//=>[ ]
//不可能重新分配
//餐具=[“勺子”];/=>TypeError:分配给常量变量。
//重新声明不可能

//const consoless={}/=>语法错误:标识符“调味品”已经声明
@adeneo我不同意。我不再使用
var
。真的没有理由这么做。至于使用哪种方法,
let
const
,这完全取决于意见。如果我不想触碰某些东西,我会使用
const
。如果它真的不应该被触摸,并且它是某种对象,我使用.IMO,没有理由不使用
const
声明数组和对象,因为您很可能不会重新定义
a
b
。我个人知道,这并不意味着它们是一成不变的;对于不变性,我会使用例如
Object.freeze
,但其他人可能会误解这一点……正如评论已经表明的那样,在这方面没有最佳实践惯例。这是一个偏好的问题。因此,我投票决定结束这个问题,因为它主要是基于观点的。@MikeC-我一直使用
var
,只有在其他两个问题使事情变得更容易时才使用它们。如果你永远找不到使用非块作用域变量的理由,那取决于你,我会的。拿出你自己的约定(并写下来)并坚持下去。一致性在这里是最重要的。谢谢。我想说如果它对Airbnb足够好,对我也足够好。