为啥我不能分配 const 但我可以控制台记录它?

Posted

技术标签:

【中文标题】为啥我不能分配 const 但我可以控制台记录它?【英文标题】:Why I can't assign a const but i can console log it?为什么我不能分配 const 但我可以控制台记录它? 【发布时间】:2019-08-14 14:26:06 【问题描述】:

我做了一些java脚本练习,让几个链接按字母顺序排列。

这里是 html

  <a href="#"> a is good </a>
  <a href="#"> c is good </a>
  <a href="#"> b is good </a>

javascript

const allhref= document.getElementsByTagName('a');
for (let index in allhref)
  console.log(allhref[index].innerHTML);
<a href="#"> a is good </a>
<a href="#"> c is good </a>
<a href="#"> b is good </a>

看起来没问题,但是当我尝试将 txt 分配给 const 时,出现了错误(未捕获的 SyntaxError:意外的令牌 const)。这是代码。

const allhref= document.getElementsByTagName('a');
for (let index in allhref)
  alltext = allhref[index].innerHTML;
console.log(alltext);
<a href="#"> a is good </a>
<a href="#"> c is good </a>
<a href="#"> b is good </a>

感谢您的回复。 这有点奇怪,我确实在我的电脑上测试过它有错误。 尝试不同的在线编辑器,没有错误。 这是代码:

  <!DOCTYPE html>
  <html lang="en">
  <head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  </head>
  <body>
    <a href="#">a is good </a>
    <a href="#">c is good </a>
    <a href="#">b is good </a>
  <script type="text/javascript">        
    const allhref= document.getElementsByTagName('a');
    for (let index in allhref)
      const alltxt = allhref[index].innerHTML;
    console.log(alltxt);
    // console.log(allhref[index].innerHTML);
  </script>
  </body>
  </html>

【问题讨论】:

使用letvar 而不是const 可以在第一次分配后更改它 如果要更改值,为什么要使用const 如果你得到一个 SyntaxError,它与分配没有任何关系。您提供的代码没有显示任何错误。 正如您在 sn-ps 中看到的,没有任何错误。我猜你在循环之前忘记了const alltext;。您的问题无法重现。请提供一个minimal reproducible example 来显示您的错误消息。 正如我在第一次 sn-ps 中所说的那样,它是 alltext = allhref[index].innerHTML;。在最后一个 sn-p 中是const alltext = allhref[index].innerHTML;。这是一个巨大的差异。您不能将 const 用于要分配新值的变量。 【参考方案1】:

const 在 JavaScript 中是不可变的。您不能为 const 分配新值。为了能够做到这一点,请将 const 更改为 let。

【讨论】:

谢谢。我试试 let 和 var,结果一样。“不是未定义”。【参考方案2】:

const 的定义是常量。初始分配后您无法更改它。请改用let

【讨论】:

【参考方案3】:

因为您没有在 for 循环之后使用大括号 (),并且 alltext 参数的范围在 for 循环中。如果在循环或条件之后有超过 1 行,则应使用花括号。下面的代码正在运行。

  const allhref= document.getElementsByTagName('a');
  for (let index in allhref) 
      alltext = allhref[index].innerHTML;
      console.log(alltext);
  

【讨论】:

为什么会出现错误信息Uncaught SyntaxError: Unexpected token const

以上是关于为啥我不能分配 const 但我可以控制台记录它?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在 React 中设置这个状态?

为啥我需要将默认引用参数定义为 const 以便我可以为其分配左值? [复制]

为啥我不能将 UIView 分配给 self.view?

为啥 const 方法不能返回非常量引用?

为啥我不能为具有相同名称的命名函数表达式中的变量赋值?

为啥我不能直接分配数据源?