【问题标题】:Why ESLint prefer-const wants object or array defined as const?为什么 ESLint prefer-const 想要将对象或数组定义为 const?
【发布时间】:2019-05-09 03:41:08
【问题描述】:

以这几行为例:

let c=[]
c[0]=23

还有这些:

let creationDate = new Date(date)
creationDate.setDate(creationDate.getDate() + daysTTL);

两个 let 语句都会引发 ESLint ERROR

Identifier .... is never reassigned; use 'const' instead of 'let'.

是否有更好的方法来指示 ESLint 我实际上正在更改值,或者此规则不适用于结构化数据/不适合结构化数据?

或者我应该切换到 const 吗?

【问题讨论】:

    标签: constants eslint


    【解决方案1】:

    实际上,ESLint 引发的问题是由于差异很小,其中const 用于从未使用= 重新分配的变量,而let 用于肯定会使用= 重新分配的变量。

    让我用你的两个例子来解释, 第一个示例变量c 没有重新分配,只是其元素的值已更改或分配,因此重新分配不是在c 上执行,而是在其元素c[0] 上执行

    关于第二个示例,您正在更改对象属性的值,但您没有将该对象重新分配给另一个对象或新对象。

    是否使用constlet 这取决于您是否会使用= 重新分配。

    希望对你有帮助

    【讨论】:

    • 那么......也许我对 const 的含义有误解......我在这里看到的唯一常量是指向结构化数据的内存引用的指针......与其他PL 不允许定义指向数据结构的 const 指针...
    • 如果你想让我用另一种语言给你一个例子,也许你能更好地理解它。假设是 JAVA,我们有最终的 ArrayList,可以分配一次,但您仍然可以随时更改其子级。
    • 这里的重点是,const 指向对象的引用,这意味着您不能更改或重新分配指向该对象的指针。这并不意味着您不能更改该对象中内容(元素或字段)的值
    • 在这方面是有道理的......但与其他 PL 相比,它仍然有点奇怪,其中 const array = [] 或 const object= new Class() 通常会产生编译器语法错误。跨度>
    • 我明白了,但是恕我直言,在您的代码上添加 Lint 检查的目的是促使人们按照更严格的模型编写 (js) 代码。我认为指向可变值的变量绝对不应该被调用或定义为默认的 const(ant)
    猜你喜欢
    • 2015-03-13
    • 2012-07-09
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多