賦值 (=)

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

賦值 (=) 運算子用於將值賦給變數或屬性。賦值表示式本身具有一個值,即被賦的值。這允許將多個賦值操作連結起來,以便將單個值賦給多個變數。

試一試

let x = 2;
const y = 3;

console.log(x);
// Expected output: 2

console.log((x = y + 1)); // 3 + 1
// Expected output: 4

console.log((x = x * y)); // 4 * 3
// Expected output: 12

語法

js
x = y

引數

x

一個有效的賦值目標,包括一個識別符號或一個屬性訪問器。它也可以是一個解構模式

y

指定要賦給 x 的值的表示式。

返回值

y 的值。

異常

ReferenceError

在嚴格模式下,如果賦給未在作用域中宣告的識別符號,則會丟擲此錯誤。

TypeError

在嚴格模式下,如果賦給不可修改的屬性,則會丟擲此錯誤。

描述

賦值運算子與在其他位置用作語法分隔符的等號 (=) 完全不同,這些位置包括:

所有這些地方都接受 = 右側的賦值表示式,所以如果你有多個等號鏈式連線在一起

js
const x = y = 5;

這等價於

js
const x = (y = 5);

這意味著 y 必須是一個預先存在的變數,而 x 是一個新宣告的 const 變數。y 被賦值為 5,而 x 則用 y = 5 表示式的值初始化,該值也是 5。如果 y 不是預先存在的變數,那麼在非嚴格模式下會隱式建立一個全域性變數 y,或者在嚴格模式下丟擲 ReferenceError。要在同一宣告中宣告兩個變數,請使用

js
const x = 5,
  y = 5;

示例

基本賦值和鏈式賦值

js
let x = 5;
let y = 10;
let z = 25;

x = y; // x is 10
x = y = z; // x, y and z are all 25

賦值表示式的值

賦值表示式本身會計算為右側的值,因此你可以同時記錄該值並將其賦給變數。

js
let x;
console.log(x); // undefined
console.log(x = 2); // 2
console.log(x); // 2

非限定識別符號賦值

全域性物件位於作用域鏈的頂部。當嘗試將名稱解析為值時,會搜尋作用域鏈。這意味著全域性物件上的屬性可以方便地從每個作用域中訪問,而無需使用 globalThis.window.global. 來限定名稱。

因為全域性物件有一個 String 屬性 (Object.hasOwn(globalThis, "String")),所以你可以使用以下程式碼:

js
function foo() {
  String("s"); // The function `String` is globally available
}

因此,全域性物件最終將被搜尋非限定識別符號。你無需輸入 globalThis.String;你可以直接輸入非限定的 String。為了使此功能在概念上更具一致性,如果沒有在作用域鏈中宣告同名變數,則對非限定識別符號的賦值將假定你希望在全域性物件上建立具有該名稱的屬性(省略 globalThis.)。

js
foo = "f"; // In non-strict mode, assumes you want to create a property named `foo` on the global object
Object.hasOwn(globalThis, "foo"); // true

嚴格模式下,對非限定識別符號的賦值將導致 ReferenceError,以避免在全域性物件上意外建立屬性。

請注意,上述含義是,與流行的錯誤資訊相反,JavaScript 沒有隱式或未宣告的變數。它只是將全域性物件與全域性作用域混淆,並允許在建立屬性時省略全域性物件限定符。

帶解構的賦值

左側也可以是賦值模式。這允許同時賦給多個變數。

js
const result = /(a+)(b+)(c+)/.exec("aaabcc");
let a = "",
  b = "",
  c = "";
[, a, b, c] = result;
console.log(a, b, c); // "aaa" "b" "cc"

欲瞭解更多資訊,請參閱解構

規範

規範
ECMAScript® 2026 語言規範
# sec-assignment-operators

瀏覽器相容性

另見