Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Ausdrucksanweisung
EineAusdrucksanweisung ist ein Ausdruck, der an einer Stelle verwendet wird, an der eine Anweisung erwartet wird. Der Ausdruck wird ausgewertet und sein Ergebnis verworfen — daher macht er nur für Ausdrücke Sinn, die Nebeneffekte haben, wie z.B. das Ausführen einer Funktion oder das Aktualisieren einer Variablen.
In diesem Artikel
Syntax
expression;expressionEin beliebigerAusdruck, der ausgewertet werden soll. Es gibtbestimmte Ausdrücke, die mit anderen Anweisungen mehrdeutig sein können und daher verboten sind.
Beschreibung
Abgesehen von denspeziellen Anweisungssyntaxen können Sie auch fast jedenAusdruck als eigenständige Anweisung verwenden. Die Syntax der Ausdrucksanweisung erfordert ein Semikolon am Ende, aber der Prozess derautomatischen Semikolon-Einfügung kann eines für Sie einfügen, wenn das Fehlen eines Semikolons zu einer ungültigen Syntax führt.
Da der Ausdruck ausgewertet und dann verworfen wird, ist das Ergebnis des Ausdrucks nicht verfügbar. Daher muss der Ausdruck irgendeinen Nebeneffekt haben, um nützlich zu sein. Ausdrucksanweisungen sind üblicherweise:
- Funktionsaufrufe (
console.log("Hello");,[1, 2, 3].forEach((i) => console.log(i));) - Getaggte Template-Strings
- Zuweisungsausdrücke, einschließlich kombinierter Zuweisungen
- Inkrement- und Dekrement-Operatoren
deleteimport()yieldundyield*
Andere können ebenfalls Nebeneffekte haben, wenn sieGetter aufrufen oderTypumwandlungen auslösen.
Verbotene Ausdrücke
Damit ein Ausdruck als Anweisung verwendet werden kann, darf er nicht mit anderen Anweisungssyntaxen mehrdeutig sein. Daher darf der Ausdruck nicht mit einem der folgenden Token beginnen:
function: was einefunction-Deklaration oderfunction*-Deklaration wäre, nicht einfunction-Ausdruck oderfunction*-Ausdruckasync function: was eineasync function-Deklaration oderasync function*-Deklaration wäre, nicht einasync function-Ausdruck oderasync function*-Ausdruckclass: was eineclass-Deklaration wäre, nicht einclass-Ausdrucklet[: was einelet-Deklaration mitArray-Destrukturierung wäre, nicht einEigenschafts-Accessor auf einer Variable namenslet(letkann nur ein Bezeichner imnicht-strikten Modus sein){: was eineBlockanweisung wäre, nicht einObjektliterar
Daher sind alle folgenden ungültig:
function foo() { console.log("foo");}(); // SyntaxError: Unexpected token '('// For some reason, you have a variable called `let`var let = [1, 2, 3];let[0] = 4; // SyntaxError: Invalid destructuring assignment target{ foo: 1, bar: 2, // SyntaxError: Unexpected token ':'};Gefährlicher ist, dass der Code manchmal gültige Syntax ist, aber nicht das, was Sie beabsichtigen.
// For some reason, you have a variable called `let`var let = [1, 2, 3];function setIndex(index, value) { if (index >= 0) { // Intend to assign to the array `let`, but instead creates an extra variable! let[index] = value; }}setIndex(0, [1, 2]);console.log(let); // [1, 2, 3]// This is not an object literal, but a block statement,// where `foo` is a label and `1` is an expression statement.// This often happens in the console{ foo: 1 };Um diese Probleme zu vermeiden, können Sie Klammern verwenden, so dass die Anweisung eindeutig eine Ausdrucksanweisung ist.
(function foo() { console.log("foo");})();Beispiele
>Vermeidung von Kontrollflussanweisungen
Sie können fast alle Verwendungen von Kontrollflussanweisungen durch Ausdrucksanweisungen vermeiden. Zum Beispiel kannif...else durchternäre Operatoren undlogische Operatoren ersetzt werden. Iterative Anweisungen wiefor oderfor...of können durchArray-Methoden ersetzt werden.
// Using control flow statementsfunction range(start, end) { if (start > end) { [start, end] = [end, start]; } const result = []; for (let i = start; i < end; i++) { result.push(i); } return result;}// Using expression statementsfunction range2(start, end) { start > end && ([start, end] = [end, start]); return Array.from({ length: end - start }, (_, i) => start + i);}Warnung:Dies demonstriert nur eine Fähigkeit der Sprache. Übermäßiger Gebrauch von Ausdrucksanweisungen als Ersatz für Kontrollflussanweisungen kann den Code wesentlich weniger lesbar machen.
Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-expression-statement> |