【问题标题】:Why most of the time should I use const instead of let in JavaScript?为什么大多数时候我应该在 JavaScript 中使用 const 而不是 let?
【发布时间】:2024-01-19 05:03:02
【问题描述】:

为什么大部分时间我应该在 JavaScript 中使用 const 而不是 let?正如我们所知,如果我们使用const,那么我们以后就不能重新分配值。那为什么不用let 而不是const呢?

【问题讨论】:

  • 为什么你认为“大多数时候我应该使用 const 而不是 let”?
  • 我假设这个问题将被关闭,所以快速回答,你不应该总是使用它们中的任何一个,你应该使用那些类型作为变量的需要,const 意味着这个变量不会在应用程序中是可变的,所以如果你看到这个变量,你就知道它不会改变,它是一个常量,let 表示这将是一个通用类型,将来会改变。如果您需要可以更改的变量,请使用 var,如果不需要,请使用 const。
  • const(在适当的时候)让别人更容易理解你的代码。通过查看const,无需查看其余代码即可知道该变量不会被重新分配(尽管它仍可能发生变异)。而且,当您不希望发生重新分配时,作为程序员,当它发生时,您会得到一个有用的错误。
  • 我从一个 facebook 群组听说过,但没有答案为什么和为什么不...... @takendarkk
  • 事实上,需要使用 const 关键字的情况非常少见。

标签: javascript constants


【解决方案1】:

基本上,

  • 如果变量的值在代码中发生变化,请使用let
  • 使用const,如果它不会并且您/您的团队希望在您正在处理的项目中的这些情况下使用const;这是风格问题

如果您确实使用了const,那么令人惊讶的是,上面的指南意味着您使用const 的频率,因为您最终不需要更改变量的值(如果您遵循通常的规则保持您的功能合理大小等)。 (好吧,无论如何,这让我感到惊讶......)

当变量的¹值不打算改变时使用const可以完成一些事情:

  1. 它告诉其他阅读您的代码的人您不打算更改该值。

  2. 如果您更改代码以便写入该变量,它会给您一个很好的主动错误。 (一个像样的 IDE 可以主动标记它,但如果没有,你会在运行代码时得到错误。)然后你可以做出一个明智的、有意识的决定:你应该把它改成let,还是你不是故意的首先要更改该变量的值?

  3. 它向 JavaScript 引擎的优化器提示您不会更改该变量的值。虽然引擎可以通过代码分析经常解决这个问题,但使用const 可以省去麻烦。 (警告:我不知道这对 JavaScript 引擎是否真的有用。看起来确实有用,但运行时代码优化是一个非常复杂且有时不直观的过程。)


¹ 是的,使用“变量”一词来指代定义上不变的事物是很有趣的。 :-) 规范中的术语是“绑定”,但我敢打赌,你不会很快听到人们在日常对话中谈论“绑定”……所以总的术语可能会保持“可变”,除非我们可以特别提及某种“常数”。

【讨论】:

    【解决方案2】:

    默认使用const本质上是编程风格的问题。不过各有利弊:

    支持默认使用 const 的参数

    支持默认使用const的论据如下:

    1. 避免了非自愿调动带来的副作用;
    2. 在代码审查期间,它消除了不确定性,因为看到const 变量的开发人员可以确信它不会被重新分配;
    3. 也许我们可以说它更符合函数式编程和不可变状态。
    4. 使用 TypeScript,在某些情况下可以进行更好的推理。

    以下是使用 const 和 TypeScript 时的优势示例:

    const hello = "Hello" as string | undefined
    if (hello !== undefined) {
        ["A", "B"].forEach(
            name => console.log(`${hello.toUpperCase()}, ${name}`) // OK
        )
    }
    

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

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

    支持默认使用 let 的参数

    我在这里总结了一篇文章Use “let” by default, not “const”,它给出了支持默认使用let而不是const的论据:

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

    【讨论】:

    • 感谢您抽出宝贵时间解释事情。我实际上不喜欢将const 用于修改了属性的对象。对我来说,这违背了不变事物的目的
    • 我什么都用 let,我没有对它进行过广泛的研究,但我发现在一些 javascript 引擎中 let 表现更好,并且刚刚开始默认使用它
    【解决方案3】:

    当你想声明一个不可编辑的变量时,你可以使用const

    同时,let 在您有可编辑变量时使用。

    它也可以用于变量作用域

    请参阅:letconst


    为什么我们大部分时间都使用const

    因为const 声明创建了一个对值的只读引用(不能重新分配)。

    它可以防止我们与变量的值混淆

    【讨论】: