GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • MDN
  • HTML: Markup language
  • Elements
  • Global attributes
  • Attributes
  • See all…
  • Responsive images
  • HTML cheatsheet
  • Date & time formats
  • See all…
  • SVG
  • MathML
  • XML
  • CSS: Styling language

This view

  • Original page
  • New address

GeezerVison is showing developer.mozilla.org — Ausdrucksanweisung - JavaScript | MDN

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Ausdrucksanweisung

Eine Ausdrucksanweisung 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.

Syntax

js
expression;
expression

Ein beliebiger Ausdruck, der ausgewertet werden soll. Es gibt bestimmte Ausdrücke, die mit anderen Anweisungen mehrdeutig sein können und daher verboten sind.

Beschreibung

Abgesehen von den speziellen Anweisungssyntaxen können Sie auch fast jeden Ausdruck als eigenständige Anweisung verwenden. Die Syntax der Ausdrucksanweisung erfordert ein Semikolon am Ende, aber der Prozess der automatischen 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
  • delete
  • import()
  • yield und yield*

Andere können ebenfalls Nebeneffekte haben, wenn sie Getter aufrufen oder Typumwandlungen 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 eine function-Deklaration oder function*-Deklaration wäre, nicht ein function-Ausdruck oder function*-Ausdruck
  • async function: was eine async function-Deklaration oder async function*-Deklaration wäre, nicht ein async function-Ausdruck oder async function*-Ausdruck
  • class: was eine class-Deklaration wäre, nicht ein class-Ausdruck
  • let[: was eine let-Deklaration mit Array-Destrukturierung wäre, nicht ein Eigenschafts-Accessor auf einer Variable namens let (let kann nur ein Bezeichner im nicht-strikten Modus sein)
  • {: was eine Blockanweisung wäre, nicht ein Objektliterar

Daher sind alle folgenden ungültig:

js
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.

js
// 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.

js
(function foo() {
  console.log("foo");
})();

Beispiele

Vermeidung von Kontrollflussanweisungen

Sie können fast alle Verwendungen von Kontrollflussanweisungen durch Ausdrucksanweisungen vermeiden. Zum Beispiel kann if...else durch ternäre Operatoren und logische Operatoren ersetzt werden. Iterative Anweisungen wie for oder for...of können durch Array-Methoden ersetzt werden.

js
// Using control flow statements
function 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 statements
function 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

Spezifikation
ECMAScript® 2027 Language Specification
# sec-expression-statement

Siehe auch

  • Anweisungen und Deklarationen
  • Ausdrücke und Operatoren

Help improve MDN

Erfahren Sie, wie Sie beitragen können Diese Seite wurde automatisch aus dem Englischen übersetzt.
Übersetzung auf GitHub anzeigen • Fehler mit dieser Übersetzung melden
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.