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" }

另見