为什么大多数时候我应该在JavaScript中使用const而不是let?

Moh*_*mon 13 javascript const

为什么我应该使用大部分时间const而不是letJavaScript?正如我们所知,如果我们使用,const那么我们以后就无法重新分配价值.那为什么不用letconst而不是const呢?

T.J*_*der 27

您应该在代码中使用letconst酌情使用:

  • let 如果变量的值在代码期间会发生变化
  • const如果它不会(但这是一个风格问题,取决于你的项目的风格指南)

在实践中,如果你遵循通常的规则来保持你的功能小等等,那么经常会发现这意味着你使用const (如果你/你的团队想要),因为你最终不需要改变一个变量,这是令人惊讶的.值.(好吧,无论如何,它让我感到惊讶......)

使用const时并不意味着variable's¹值来改变完成几件事情:

  1. 它告诉其他人阅读你的代码,你不打算改变价值.

  2. 如果您执行的操作会更改变量的值而不打算这样做,它会为您提供一个很好的主动错误.(智能IDE可以主动标记它.)

  3. 它给出了JavaScript引擎优化器的提示,你不会改变该变量的值.虽然引擎可以经常通过静态代码分析来解决const这个问题,但是使用它可以省去麻烦,并且当静态代码分析可能无法显示值不变时,可以使用它.

当您收到上述#2中的错误时,您可以做出明智的决定:您应该将其更改为let,或者您是否意味着首先要更改该变量的值?


¹是的,使用术语"变量"来指代根据定义不变的东西是很有趣的.:-)规范的术语是"绑定",但我打赌你不会听到人们很快就会在日常会话中谈论"绑定"...所以总体术语可能会保持"可变",除非我们可以特别提到作为"常数"的东西.


Pal*_*leo 8

为什么const默认使用是一种意见

使用const缺省不再表示意图创造一个实常数(例如显影剂可以首先声明与可变const,之前将其切换至let执行期间)。另一方面,这种处理方式意味着使用let表示警告:“请注意,此变量将被修改”。

let默认情况下使用并不表示要修改变量或不打算修改变量。但这使用了const代表以下信息:“我希望此变量为常量”。

因此,这是编程风格的问题。

支持const默认使用的参数

支持const默认使用的参数如下:

  1. 它避免了因非自愿调动而引起的副作用;
  2. 在代码审查期间,它消除了不确定性,因为看到const变量的开发人员可以依靠不会重新分配该变量的确定性。
  3. 也许我们可以说它与函数编程和不可变状态更加一致。
  4. 使用TypeScript,在某些情况下具有更好的推断。

这是const与TypeScript一起使用时的优势示例:

const hello = "Hello" as string | undefined
if (hello !== undefined) {
    ["Pierre", "Paul"].forEach(
        name => console.log(`${hello.toUpperCase()}, ${name}`) // OK
    )
}
Run Code Online (Sandbox Code Playgroud)

使用let,在strict模式下,TypeScript会检测到错误:

let hello = // …
// …
        name => console.log(`${hello.toUpperCase()}, ${name}`)
//                             ^__ error here: Object is possibly 'undefined'.
Run Code Online (Sandbox Code Playgroud)

支持let默认使用的参数

我在这里总结了默认情况下使用“ let”而不是“ const”的文章,该文章提供了支持let默认使用而不是const

  1. 重新分配不是危险的事情,只是……平常;
  2. 如果一个变量可以被重新分配,那么它应该有声明let,因为它更具有表现力,以储备const为实常数;
  3. const 具有误导性,因为它不会阻止对引用的修改;
  4. 书写和捆绑还有两个字符。
  5. const默认情况下使用与功能参数不一致。
  6. 无法使用性能提升const

  • 我很感谢您花时间解释事情。实际上,我不喜欢对属性已修改的对象使用“const”。对我来说,这违背了那些不会改变的东西的目的 (3认同)
  • @KearneyTaaffe,问题是这甚至不是 JS 特定的。如果您有 Java 或 Kotlin 或几乎任何语言的常量,则该常量定义它不能重新分配,但这并不意味着您不能更改该常量的属性。我见过语言课程老师在尝试解释实际代码中的常量时对此感到惊讶,这表明这个概念是多么令人困惑。我认为语言程序员应该让常量真正保持常量。 (2认同)