TypeError: invalid assignment to const "x"
JavaScript 異常 "invalid assignment to 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)
錯誤型別
TypeError
哪裡出錯了?
常量是一個在正常執行期間程式不能更改的值。它不能透過重新賦值來更改,也不能重新宣告。在 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" }