【问题标题】:What is the preferred declaration convention for objects or arrays: const or let?对象或数组的首选声明约定是什么:const 还是 let?
【发布时间】:2018-03-15 03:37:04
【问题描述】:

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

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

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

【问题讨论】:

  • @adeneo 我不同意。我再也不用var了。真的没有理由。至于使用哪个,letconst,这完全取决于意见。如果我打算不碰某些东西,我会使用const。如果它真的不应该被触摸,并且它是某种对象,我使用Object.freeze
  • IMO,没有理由不用const 声明数组和对象,因为您很可能不会重新定义ab我个人知道这并不意味着它们是不可变的;对于不变性,我会使用例如Object.freeze,但其他人可能会误解……
  • 正如 cmets 已经表明的那样,对此没有最佳实践约定。这是一个偏好问题。因此,我投票结束这个问题,因为它主要基于意见。
  • @MikeC - 我一直使用var,只有在其他两个让事情变得更容易时才使用它们。如果您永远找不到使用非块范围变量的理由,那完全取决于您。
  • 想出自己的约定(并写下来)并坚持下去。一致性在这里是最重要的。

标签: javascript standards tslint


【解决方案1】:

对象前面的const 关键字表示存在一个对象,并且您正在使用references 来更改它。它还(正确地)暗示您不应尝试重新分配对该对象的引用。

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

const obj2 = {z: 'baz'};

obj = obj2; // const will prevent this operation. 

const 并不意味着不应更改对象属性。这确实意味着您不应该尝试更改参考。

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

来源:AirBnB Javascript Style Guide

【讨论】:

  • 谢谢。我会说,如果它对 Airbnb 来说足够好,那对我来说就足够了。
【解决方案2】:

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

Mutation - 更新内存中的值

重新分配 - 变量指向存储新值的新内存位置

Let - 提供突变和重新分配

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

两者 - 不提供重新声明

如果你的用例只需要突变,你可以选择 const.. 如果你需要重新分配,那就选择 let。

// LET

let condiments = ['Ketchup', 'Soy Sauce', 'Sriracha'];

// Mutation possible
condiments[0] = 'Mayo';
console.log(condiments);//=> [ 'Mayo', 'Soy Sauce', 'Sriracha' ]

// Re-assigning possible
condiments = ['Mayo'];
console.log(condiments); //=> [ 'Mayo' ]

// Re-declaring not possible
//let condiments = [] //=> SyntaxError: Identifier 'condiments' has already been declared


// CONST

const utensils = ['Fork', 'Chopsticks', 'Spork'];

// Mutation Possible
utensils[2] = 'Spoon'
console.log(utensils); //=> [ 'Fork', 'Chopsticks', 'Spoon' ]
utensils.length = 0
console.log(utensils); //=> [ ]

// Re-assigning not possible
//utensils = ['Spoon']; //=> TypeError: Assignment to constant variable.

// Re-declaring not possible
//const utensils = {} //=> SyntaxError: Identifier 'condiments' has already been declared

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多