| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/Expression_statement | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
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 fr Ausdrcke Sinn, die Nebeneffekte haben, wie z.B. das Ausfhren einer Funktion oder das Aktualisieren einer Variablen.
expression;
expressionEin beliebiger Ausdruck, der ausgewertet werden soll. Es gibt bestimmte Ausdrcke, die mit anderen Anweisungen mehrdeutig sein knnen und daher verboten sind.
Abgesehen von den speziellen Anweisungssyntaxen knnen Sie auch fast jeden Ausdruck als eigenstndige Anweisung verwenden. Die Syntax der Ausdrucksanweisung erfordert ein Semikolon am Ende, aber der Prozess der automatischen Semikolon-Einfgung kann eines fr Sie einfgen, wenn das Fehlen eines Semikolons zu einer ungltigen Syntax fhrt.
Da der Ausdruck ausgewertet und dann verworfen wird, ist das Ergebnis des Ausdrucks nicht verfgbar. Daher muss der Ausdruck irgendeinen Nebeneffekt haben, um ntzlich zu sein. Ausdrucksanweisungen sind blicherweise:
console.log("Hello");, [1, 2, 3].forEach((i) => console.log(i));)deleteimport()yield und yield*Andere knnen ebenfalls Nebeneffekte haben, wenn sie Getter aufrufen oder Typumwandlungen auslsen.
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 wre, nicht ein function-Ausdruck oder function*-Ausdruckasync function: was eine async function-Deklaration oder async function*-Deklaration wre, nicht ein async function-Ausdruck oder async function*-Ausdruckclass: was eine class-Deklaration wre, nicht ein class-Ausdrucklet[: was eine let-Deklaration mit Array-Destrukturierung wre, nicht ein Eigenschafts-Accessor auf einer Variable namens let (let kann nur ein Bezeichner im nicht-strikten Modus sein){: was eine Blockanweisung wre, nicht ein ObjektliterarDaher sind alle folgenden ungltig:
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 ':'
};
Gefhrlicher ist, dass der Code manchmal gltige 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, knnen Sie Klammern verwenden, so dass die Anweisung eindeutig eine Ausdrucksanweisung ist.
(function foo() {
console.log("foo");
})();
Sie knnen fast alle Verwendungen von Kontrollflussanweisungen durch Ausdrucksanweisungen vermeiden. Zum Beispiel kann if...else durch ternre Operatoren und logische Operatoren ersetzt werden. Iterative Anweisungen wie for oder for...of knnen durch Array-Methoden ersetzt werden.
// 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 Fhigkeit der Sprache. bermiger Gebrauch von Ausdrucksanweisungen als Ersatz fr Kontrollflussanweisungen kann den Code wesentlich weniger lesbar machen.
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-expression-statement |
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |