Baseline Widely available
Der void
-Operator wertet den gegebenen Ausdruck
aus und gibt anschlieÃend undefined
zurück.
const output = void 1;
console.log(output);
// Expected output: undefined
void console.log("expression evaluated");
// Expected output: "expression evaluated"
void (function iife() {
console.log("iife is executed");
})();
// Expected output: "iife is executed"
void function test() {
console.log("test function executed");
};
try {
test();
} catch (e) {
console.log("test function is not defined");
// Expected output: "test function is not defined"
}
Syntax Beschreibung
Dieser Operator ermöglicht es, Ausdrücke, die einen Wert produzieren, an Stellen zu verwenden, an denen ein Ausdruck gewünscht wird, der zu undefined
ausgewertet wird.
Der void
-Operator wird oft einfach dazu verwendet, den primitiven Wert undefined
zu erhalten, üblicherweise mit void(0)
(was gleichbedeutend ist mit void 0
). In diesen Fällen kann die globale Variable undefined
verwendet werden.
Es sollte beachtet werden, dass die Priorität des void
-Operators berücksichtigt werden sollte und dass Klammern dazu beitragen können, die Auswertung des Ausdrucks nach dem void
-Operator zu verdeutlichen:
void 2 === "2"; // (void 2) === '2', returns false
void (2 === "2"); // void (2 === '2'), returns undefined
Beispiele Sofort aufgerufene Funktionsausdrücke
Bei der Verwendung eines sofort aufgerufenen Funktionsausdrucks kann das function
-Schlüsselwort nicht direkt am Anfang der Anweisung stehen, da dies als Funktionsdeklaration geparst wird und zu einem Syntaxfehler führt, wenn die Klammern für den Aufruf erreicht werden â wenn die Funktion namenlos ist, würde dies sofort ein Syntaxfehler sein, wenn die Funktion als Deklaration geparst wird.
function iife() {
console.log("Executed!");
}(); // SyntaxError: Unexpected token ')'
function () {
console.log("Executed!");
}(); // SyntaxError: Function statements require a function name
Damit die Funktion als Ausdruck geparst wird, muss das function
-Schlüsselwort an einer Position erscheinen, die nur Ausdrücke und nicht Anweisungen akzeptiert. Dies kann erreicht werden, indem das Schlüsselwort mit einem unären Operator versehen wird, der nur Ausdrücke als Operanden akzeptiert. Der Funktionsaufruf hat eine höhere Priorität als unäre Operatoren, daher wird er zuerst ausgeführt. Sein Rückgabewert (der fast immer undefined
ist) wird an den unären Operator übergeben und dann sofort verworfen.
Von allen unären Operatoren bietet void
die beste Bedeutung, da es deutlich macht, dass der Rückgabewert des Funktionsaufrufs verworfen werden soll.
void function () {
console.log("Executed!");
}();
// Logs "Executed!"
Dies ist etwas länger als das Einhüllen des Funktionsausdrucks in Klammern, was den gleichen Effekt hat, nämlich das function
-Schlüsselwort als Beginn eines Ausdrucks statt als Anweisung zu parsen.
(function () {
console.log("Executed!");
})();
Beachten Sie, dass dieser Trick nur auf IIFEs anwendbar ist, die mit dem function
-Schlüsselwort definiert sind. Der Versuch, den void
-Operator zu verwenden, um Klammern bei einem Pfeilfunktionsausdruck zu vermeiden, führt zu einem Syntaxfehler. Pfeilfunktionsausdrücke erfordern immer Klammern um sie, wenn sie aufgerufen werden.
void () => { console.log("iife!"); }(); // SyntaxError: Malformed arrow function parameter list
JavaScript-URIs
Wenn ein Browser einem javascript:
URI folgt, wird der Code im URI ausgewertet und dann der Inhalt der Seite durch den zurückgegebenen Wert ersetzt, es sei denn, der zurückgegebene Wert ist undefined
. Der void
-Operator kann verwendet werden, um undefined
zurückzugeben. Zum Beispiel:
<a href="javascript:void(0);">Click here to do nothing</a>
<a href="javascript:void(document.body.style.backgroundColor='green');">
Click here for green background
</a>
Hinweis: Das javascript:
-Pseudo-Protokoll wird zugunsten anderer Alternativen, wie zum Beispiel unobtrusiver Ereignisbehandler, nicht empfohlen.
Pfeilfunktionen führen eine abgekürzte klammerlose Syntax ein, die einen Ausdruck zurückgibt. Dies kann unbeabsichtigte Nebeneffekte haben, wenn der Ausdruck ein Funktionsaufruf ist, bei dem sich der zurückgegebene Wert von undefined
zu einem anderen Wert ändert.
Wenn beispielsweise doSomething()
im untenstehenden Code false
zurückgibt, wird das Kontrollkästchen nicht mehr als markiert oder unmarkiert angezeigt, wenn das Kontrollkästchen angeklickt wird (die Rückgabe von false
aus dem Handler deaktiviert die Standardaktion).
checkbox.onclick = () => doSomething();
Dies ist wahrscheinlich kein gewünschtes Verhalten! Um sicherzugehen, dass der Rückgabewert einer Funktion nicht verwendet wird, kann er an den void
-Operator übergeben werden, um sicherzustellen, dass (zum Beispiel) sich ändernde APIs nicht dazu führen, dass sich das Verhalten von Pfeilfunktionen ändert.
checkbox.onclick = () => void doSomething();
Spezifikationen Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4