Zuweisungsoperator (=)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Der Zuweisungsoperator (=
) wird verwendet, um einer Variablen oder Eigenschaft einen Wert zuzuweisen. Der Zuweisungsausdruck selbst hat einen Wert, nämlich den zugewiesenen Wert. Dies ermöglicht es, mehrere Zuweisungen zu verketten, um einen einzelnen Wert mehreren Variablen zuzuweisen.
Probieren Sie es aus
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
Syntax
x = y
Parameter
x
-
Ein gültiges Zuweisungsziel, einschließlich eines Identifiers oder eines Property-Accessors. Es kann auch ein Destructuring-Muster sein.
y
-
Ein Ausdruck, der den Wert spezifiziert, der
x
zugewiesen werden soll.
Rückgabewert
Der Wert von y
.
Ausnahmen
ReferenceError
-
Wird im Strict-Mode ausgelöst, wenn einem Identifier, der nicht im Geltungsbereich deklariert ist, ein Wert zugewiesen wird.
TypeError
-
Wird im Strict-Mode ausgelöst, wenn einer Eigenschaft, die nicht modifizierbar ist, ein Wert zugewiesen wird.
Beschreibung
Der Zuweisungsoperator unterscheidet sich völlig vom Gleichheitszeichen (=
), das an anderen Stellen als syntaktische Trennung verwendet wird, einschließlich:
- Initialisierer von
var
,let
, undconst
-Deklarationen - Standardwerte bei Destructuring
- Standardparameter
- Initialisierer von Klassenfeldern
All diese Stellen akzeptieren einen Zuweisungsausdruck auf der rechten Seite des =
, daher gilt bei mehreren verketteten Gleichheitszeichen:
const x = y = 5;
Dies ist gleichbedeutend mit:
const x = (y = 5);
Das bedeutet, y
muss eine bereits existierende Variable sein, und x
ist eine neu deklarierte const
-Variable. y
wird der Wert 5
zugewiesen, und x
wird mit dem Wert des y = 5
-Ausdrucks initialisiert, der ebenfalls 5
ist. Wenn y
keine bereits existierende Variable ist, wird eine globale Variable y
im Nicht-Striktmodus implizit erstellt, oder ein ReferenceError
wird im Striktmodus ausgelöst. Um zwei Variablen innerhalb derselben Deklaration zu erklären, verwenden Sie:
const x = 5,
y = 5;
Beispiele
Grundlegende Zuweisung und Verkettung
let x = 5;
let y = 10;
let z = 25;
x = y; // x is 10
x = y = z; // x, y and z are all 25
Wert von Zuweisungsausdrücken
Der Zuweisungsausdruck selbst wird zu dem Wert auf der rechten Seite ausgewertet, sodass Sie den Wert gleichzeitig protokollieren und einer Variablen zuweisen können.
let x;
console.log(x); // undefined
console.log(x = 2); // 2
console.log(x); // 2
Zuweisung eines nicht qualifizierten Identifiers
Das globale Objekt steht an der Spitze der Geltungsbereichskette. Beim Versuch, einen Namen in einen Wert aufzulösen, wird die Geltungsbereichskette durchsucht. Dies bedeutet, dass Eigenschaften am globalen Objekt von jedem Bereich aus bequem sichtbar sind, ohne dass die Namen mit globalThis.
oder window.
oder global.
qualifiziert werden müssen.
Da das globale Objekt eine String
-Eigenschaft hat (Object.hasOwn(globalThis, "String")
), können Sie den folgenden Code verwenden:
function foo() {
String("s"); // The function `String` is globally available
}
Das globale Objekt wird letztendlich nach nicht qualifizierten Identifiers durchsucht. Sie müssen nicht globalThis.String
tippen; Sie können einfach das unqualifizierte String
verwenden. Um diese Funktion konzeptionell konsistenter zu gestalten, geht die Zuweisung an nicht qualifizierte Identifiers davon aus, dass Sie eine Eigenschaft mit diesem Namen am globalen Objekt erstellen möchten (mit ausgelassenem globalThis.
), wenn es keine Variable mit demselben Namen in der Geltungsbereichskette gibt.
foo = "f"; // In non-strict mode, assumes you want to create a property named `foo` on the global object
Object.hasOwn(globalThis, "foo"); // true
Im Striktmodus führt die Zuweisung an einen nicht qualifizierten Identifier im Striktmodus zu einem ReferenceError
, um die versehentliche Erstellung von Eigenschaften im globalen Objekt zu vermeiden.
Es ist zu beachten, dass die obige Implikation bedeutet, dass JavaScript entgegen der weit verbreiteten Fehlinformation keine impliziten oder nicht deklarierten Variablen hat. Es verwechselt lediglich das globale Objekt mit dem globalen Geltungsbereich und erlaubt es, den Qualifizierer des globalen Objekts bei der Erstellung von Eigenschaften auszulassen.
Zuweisung mit Destructuring
Die linke Seite kann auch ein Zuweisungsmuster sein. Dies ermöglicht es, mehreren Variablen gleichzeitig Werte zuzuweisen.
const result = /(a+)(b+)(c+)/.exec("aaabcc");
let a = "",
b = "",
c = "";
[, a, b, c] = result;
console.log(a, b, c); // "aaa" "b" "cc"
Für weitere Informationen siehe Destructuring.
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-assignment-operators |