Zuweisung (=)
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 einem Variablen- oder Objekteigenschaftswert eine Zuweisung zuzuweisen. Der Zuweisungsausdruck selbst hat einen Wert, der dem zugewiesenen Wert entspricht. Dies ermöglicht die Verkettung mehrerer Zuweisungen, um denselben 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 Assignment Pattern sein.
y
-
Ein Ausdruck, der den Wert angibt, der
x
zugewiesen werden soll.
Rückgabewert
Der Wert von y
.
Ausnahmen
ReferenceError
-
Wird im Strict-Modus ausgelöst, wenn ein Identifier zugewiesen wird, der im Scope nicht deklariert ist.
TypeError
-
Wird im Strict-Modus ausgelöst, wenn eine Eigenschaft, die nicht geändert werden kann zugewiesen wird.
Beschreibung
Der Zuweisungsoperator unterscheidet sich vollständig vom Gleichheitszeichen (=
), das als syntaktischer Trenner an anderen Stellen verwendet wird, einschließlich:
- Initialisierungen von
var
,let
undconst
-Deklarationen - Standardwerte bei Destructuring
- Standardparameter
- Initialisierungen von Klassenfeldern
Alle diese Stellen akzeptieren einen Zuweisungsausdruck auf der rechten Seite des =
, sodass bei mehreren verknüpften Gleichheitszeichen folgendes gilt:
const x = y = 5;
Dies entspricht:
const x = (y = 5);
Was bedeutet, dass y
eine vorher existierende Variable sein muss und x
eine neu deklarierte const
-Variable ist. y
wird der Wert 5
zugewiesen, und x
wird mit dem Wert des Ausdrucks y = 5
initialisiert, der ebenfalls 5
ist. Falls y
keine vorher existierende Variable ist, wird im nicht-strikten Modus eine globale Variable y
implizit erstellt, oder im strikten Modus wird ein ReferenceError
ausgelöst. Um zwei Variablen innerhalb derselben Deklaration zu deklarieren, 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 wie der Wert auf der rechten Seite ausgewertet, sodass Sie den Wert protokollieren und einer Variablen gleichzeitig zuweisen können.
let x;
console.log(x); // undefined
console.log(x = 2); // 2
console.log(x); // 2
Zuweisung an unqualifizierte Identifier
Das globale Objekt steht an der Spitze der Scope-Kette. Beim Versuch, einen Namen einem Wert zuzuordnen, wird die Scope-Kette durchsucht. Dies bedeutet, dass Eigenschaften des globalen Objekts bequem von jedem Scope aus sichtbar sind, ohne dass die Namen mit globalThis.
, 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 daher schließlich nach unqualifizierten Identifiers durchsucht. Sie müssen nicht globalThis.String
eingeben; Sie können einfach den unqualifizierten String
eingeben. Um diese Funktion konzeptionell konsistenter zu gestalten, wird bei der Zuweisung an unqualifizierte Identifiers davon ausgegangen, dass Sie möchten, dass eine Eigenschaft mit diesem Namen auf dem globalen Objekt erstellt wird (ohne globalThis.
), sofern keine Variable mit demselben Namen in der Scope-Kette deklariert ist.
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 strikten Modus führt die Zuweisung an einen unqualifizierten Identifier im Strict-Modus zu einem ReferenceError
, um die versehentliche Erstellung von Eigenschaften auf dem globalen Objekt zu vermeiden.
Beachten Sie, dass dies bedeutet, dass JavaScript entgegen der weit verbreiteten Falschinformation keine impliziten oder nicht deklarierten Variablen hat. JavaScript führt stattdessen das globale Objekt mit dem globalen Scope zusammen und erlaubt es, den Qualifizierer des globalen Objekts während der Eigenschaften-Erstellung wegzulassen.
Zuweisung mit Destructuring
Die linke Seite kann auch ein Zuweisungsmuster sein. Dies ermöglicht die Zuweisung von Werten an mehrere Variablen gleichzeitig.
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 assignment.
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-assignment-operators |
Browser-Kompatibilität
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Assignment ( x = y ) |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support