首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StandardJS不承认array.push()为重新分配

StandardJS不承认array.push()为重新分配
EN

Stack Overflow用户
提问于 2020-07-04 00:48:36
回答 1查看 30关注 0票数 0

我在循环之前声明了一个空数组,然后在循环运行时填充该数组。我的代码运行良好,但当我使用StandardJS链接时,它会告诉我,数组永远不会被重新分配,应该被声明为const。如果我这样做了,我就无法向数组中添加值,我的代码也无法工作。这也意味着我不能使用标准--修复,因为它破坏了我的代码。

代码语言:javascript
复制
let primeFactors = []
while (number > 1) {
  if (isPrime(divisor)) {
    if (number % divisor === 0) {
      primeFactors.push(divisor)
      number = number / divisor
    } else {
      divisor++
    }
  } else {
    divisor++
  }
}

我是不是漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-04 01:05:05

您可以,而且应该使用const

名称const有点用词不当--它只是说变量一旦声明,就不能重新声明或重新分配--也就是说,它总是指向内存中的同一个对象(或者更普遍地说,它的值总是与第一次创建时相同的值),请参见这篇关于MDN的文章

但是,请注意,即使将对象声明为const,对象也可以是可变的。仅仅因为primeFactors总是指向同一个数组,并不意味着数组不能增长/收缩/更改。

在我的javascript中,很少有变量是let --我几乎在任何地方都使用const,这使得代码更易于阅读和推理。(我使用let的唯一时间是对每个循环偶尔使用一次,偶尔使用助手算法方法)

因此,linter在技术上是正确的,并且鼓励最佳实践--例如,linter正在保护您不受以下代码的影响,这将导致例如Uncaught TypeError: Cannot read property 'push' of null

代码语言:javascript
复制
let primeFactors = []
while (number > 1) {
  if (isPrime(divisor)) {
    if (number % divisor === 0) {
      primeFactors.push(divisor)
      number = number / divisor
    } else {
      divisor++
      primeFactors = null // There's no reason to do this, but it's theoretically possible!
    }
  } else {
    divisor++
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62724180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档