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 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 einem einzigen Wert mehreren Variablen zuzuweisen.
Probieren Sie es aus
Syntax
x = y
Parameter
x
-
Ein gültiges Zuweisungsziel, einschließlich eines Bezeichners oder eines Eigenschafts-Zugriffs. Es kann auch ein Destructuring-Zuweisungs-Muster sein.
y
-
Ein Ausdruck, der den Wert angibt, der
x
zugewiesen werden soll.
Rückgabewert
Der Wert von y
.
Ausnahmen
ReferenceError
-
In Strict Mode ausgelöst, wenn ein Bezeichner zugewiesen wird, der nicht im Geltungsbereich deklariert ist.
TypeError
-
In Strict Mode ausgelöst, wenn einer nicht änderbaren Eigenschaft zugewiesen wird.
Beschreibung
Der Zuweisungsoperator unterscheidet sich vollständig vom Gleichheitszeichen (=
), das in anderen Kontexten als syntaktischer Trenner verwendet wird, einschließlich:
- Initialisierer von
var
,let
undconst
Deklarationen - Vorgabewerten von Destructuring
- Standardparameter
- Initialisierer von Klassenfeldern
All diese Stellen akzeptieren einen Zuweisungsausdruck auf der rechten Seite des =
, sodass, wenn mehrere Gleichheitszeichen zusammen verknüpft sind:
const x = y = 5;
Das entspricht:
const x = (y = 5);
Das bedeutet, y
muss eine bereits vorhandene Variable sein, und x
ist eine neu deklarierte const
-Variable. y
wird der Wert 5
zugewiesen, und x
wird mit dem Wert des Ausdrucks y = 5
initialisiert, der ebenfalls 5
ist. Wenn y
keine bereits vorhandene Variable ist, wird in nicht-strengem Modus implizit eine globale Variable y
erstellt, oder es wird in Strict Mode 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 wertet sich auf den Wert der rechten Seite aus, sodass Sie den Wert protokollieren und gleichzeitig einer Variablen zuweisen können.
let x;
console.log(x); // undefined
console.log(x = 2); // 2
console.log(x); // 2
Zuweisung von unqualifizierten Bezeichnern
Das globale Objekt sitzt oben in der Geltungskettenhierarchie. Wenn versucht wird, einen Namen zu einem Wert aufzulösen, wird die Geltungskette durchsucht. Dies bedeutet, dass Eigenschaften des globalen Objekts bequem von jedem Geltungsbereich 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
}
Daher wird das globale Objekt letztendlich nach unqualifizierten Bezeichnern durchsucht. Sie müssen nicht globalThis.String
eingeben; Sie können einfach den unqualifizierten String
eingeben. Um diese Funktion konzeptionell konsistenter zu gestalten, wird angenommen, dass mit der Zuweisung unqualifizierter Bezeichner gewünscht wird, eine Eigenschaft mit diesem Namen im globalen Objekt zu erstellen (ohne globalThis.
), wenn keine Variable mit demselben Namen in der Geltungskettenhierarchie 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 Strict Mode führt die Zuweisung zu einem unqualifizierten Bezeichner im Strict Mode zu einem ReferenceError
, um die versehentliche Erstellung von Eigenschaften im globalen Objekt zu vermeiden.
Es sollte beachtet werden, dass im Gegensatz zur beliebten Fehlinformation JavaScript keine impliziten oder nicht deklarierten Variablen hat. Es kombiniert einfach das globale Objekt mit dem globalen Geltungsbereich und erlaubt das Weglassen des globalen Objektqualifikators während der Erstellung von Eigenschaften.
Zuweisung mit Destructuring
Die linke Seite kann auch ein Zuweisungsmuster sein. Dies ermöglicht die Zuweisung 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-Zuweisung.
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-assignment-operators |
Browser-Kompatibilität
BCD tables only load in the browser