TypeError: 对 const "x" 的无效赋值
当试图更改常量值时,JavaScript 异常“对 const 的无效赋值”就会出现。JavaScript const
声明不能重新赋值或重新声明。
消息
TypeError: Assignment to constant variable. (V8-based) TypeError: invalid assignment to const 'x' (Firefox) TypeError: Attempted to assign to readonly property. (Safari)
错误类型
哪里出错了?
常量是一个在程序正常执行期间不能被程序更改的值。它不能通过重新赋值来更改,也不能重新声明。在 JavaScript 中,常量使用 const
关键字声明。
示例
无效的重新声明
在同一个块作用域中为同一个常量名赋值会抛出异常。
js
const COLUMNS = 80;
// …
COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'
修复错误
有多种方法可以修复此错误。检查用该常量打算实现什么。
重命名
如果您打算声明另一个常量,请选择另一个名称并重命名。该常量名在该作用域中已被使用。
js
const COLUMNS = 80;
const WIDE_COLUMNS = 120;
const、let 还是 var?
如果您没有打算声明一个常量,请不要使用 const。也许您打算使用 let
声明一个块作用域变量,或者使用 var
声明一个全局变量。
js
let columns = 80;
// …
columns = 120;
作用域
检查您是否在正确的作用域中。该常量应该出现在该作用域中,还是应该出现在例如函数中?
js
const COLUMNS = 80;
function setupBigScreenEnvironment() {
const COLUMNS = 120;
}
const 和不变性
const
声明创建一个指向值的只读引用。它并不意味着它持有的值是不可变的,只是变量标识符不能被重新分配。例如,如果内容是一个对象,这意味着对象本身仍然可以被修改。这意味着您不能更改存储在变量中的值
js
const obj = { foo: "bar" };
obj = { foo: "baz" }; // TypeError: invalid assignment to const `obj'
但您可以更改变量中的属性
js
obj.foo = "baz";
obj; // { foo: "baz" }