这个错误 “Uncaught TypeError: Assignment to constant variable.” 是 JavaScript 中非常常见的错误,意思是:你试图给一个用 const 声明的变量重新赋值,而 const 声明的变量是不可重新赋值的。

🔍 错误原因

在 JavaScript 中:

  • const 声明的是常量引用(constant reference),不是“不可变的值”。
  • 一旦用 const 声明了一个变量,你就不能再用 = 给它指向一个新的值。

✅ 正确示例:
const x = 5;
// x = 10; // ❌ 报错!Assignment to constant variable.

⚠️ 常见错误场景:

  1. 误以为 const 可以重新赋值
    const name = “Alice”;
    name = “Bob”; // ❌ TypeError!

✅ 解决方案:如果需要重新赋值,请使用 let:
let name = “Alice”;
name = “Bob”; // ✅ 合法

  1. 对象或数组内容可以改,但不能整体重赋值
    const user = { name: “Alice” };
    user.name = “Bob”; // ✅ 合法!修改属性是可以的

user = { name: “Charlie” }; // ❌ 报错!不能把 user 指向新对象

同样适用于数组:
const arr = [1, 2, 3];
arr.push(4); // ✅ 合法
arr[0] = 99; // ✅ 合法
arr = [4, 5, 6]; // ❌ 报错!

  1. 循环中错误地重复声明 const
    for (const i = 0; i < 5; i++) {
    // …
    }
    // ❌ 这会报错,因为 i 被尝试多次赋值(i++)

✅ 应该用 let:
for (let i = 0; i < 5; i++) {
// ✅ 正确
}

🛠 如何修复?

  1. 检查报错行:找到哪一行在给 const 变量赋值。
  2. 判断意图:
    • 如果你确实需要重新赋值 → 改用 let。
    • 如果你只是想修改对象/数组内部 → 确保没有用 = 重新赋值整个变量。
  3. 不要在循环初始化中用 const(除非是 for…of 或 for…in)。

✅ 正确使用建议
场景 推荐声明
值不会改变(如配置、PI) const

值会变化(如计数器、用户输入) let

全局常量 const

循环变量 let(普通 for),const(for…of)

// ✅ 好习惯
const API_URL = “https://api.example.com”;
const user = { id: 1 };

let count = 0;
for (const item of items) { // ✅ const 在 for…of 中合法
count++;
}

如果你能提供具体的出错代码片段,我可以帮你精准定位并修复!

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐