Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
void-Operator
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Dervoid-Operator wertet den gegebenenAusdruck aus und gibt anschließendundefined zurück.
In diesem Artikel
Probieren Sie es aus
const output = void 1;console.log(output);// Expected output: undefinedvoid 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
void expressionBeschreibung
Dieser Operator ermöglicht es, Ausdrücke, die einen Wert produzieren, an Stellen zu verwenden, an denen ein Ausdruck gewünscht wird, der zuundefined ausgewertet wird.
Dervoid-Operator wird oft einfach dazu verwendet, den primitiven Wertundefined zu erhalten, üblicherweise mitvoid(0) (was gleichbedeutend ist mitvoid 0). In diesen Fällen kann die globale Variableundefined verwendet werden.
Es sollte beachtet werden, dass diePriorität desvoid-Operators berücksichtigt werden sollte und dass Klammern dazu beitragen können, die Auswertung des Ausdrucks nach demvoid-Operator zu verdeutlichen:
void 2 === "2"; // (void 2) === '2', returns falsevoid (2 === "2"); // void (2 === '2'), returns undefinedBeispiele
>Sofort aufgerufene Funktionsausdrücke
Bei der Verwendung einessofort aufgerufenen Funktionsausdrucks kann dasfunction-Schlüsselwort nicht direkt am Anfang derAnweisung stehen, da dies alsFunktionsdeklaration 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 nameDamit die Funktion alsAusdruck geparst wird, muss dasfunction-Schlüsselwort an einer Position erscheinen, die nur Ausdrücke und nicht Anweisungen akzeptiert. Dies kann erreicht werden, indem das Schlüsselwort mit einemunären Operator versehen wird, der nur Ausdrücke als Operanden akzeptiert. Der Funktionsaufruf hat eine höherePriorität als unäre Operatoren, daher wird er zuerst ausgeführt. Sein Rückgabewert (der fast immerundefined ist) wird an den unären Operator übergeben und dann sofort verworfen.
Von allen unären Operatoren bietetvoid 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 dasfunction-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 demfunction-Schlüsselwort definiert sind. Der Versuch, denvoid-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 listJavaScript-URIs
Wenn ein Browser einem#"/de/docs/Web/JavaScript/Reference/Global_Objects/undefined">. Derundefinedvoid-Operator kann verwendet werden, umundefined zurückzugeben. Zum Beispiel:
<a href="#">Click here to do nothing</a><a href="#"> Click here for green background</a>Hinweis:Das 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 Wenn beispielsweise Dies ist wahrscheinlich kein gewünschtes Verhalten! Um sicherzugehen, dass der Rückgabewert einer Funktion nicht verwendet wird, kann er an den#"nicht-leckende_pfeilfunktionen" >Nicht-leckende Pfeilfunktionen
undefined zu einem anderen Wert ändert.doSomething() im untenstehenden Codefalse zurückgibt, wird das Kontrollkästchen nicht mehr als markiert oder unmarkiert angezeigt, wenn das Kontrollkästchen angeklickt wird (die Rückgabe vonfalse aus dem Handler deaktiviert die Standardaktion).checkbox.onclick = () => doSomething();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
Specification ECMAScript® 2026 Language Specification>
# sec-void-operator>Browser-Kompatibilität
Siehe auch
- JavaScript
- Tutorials und Anleitungen
JavaScript-Handbuch
- Einführung
- Grammatik und Typen
- Steuerfluss und Fehlerbehandlung
- Schleifen und Iteration
- Funktionen
- Ausdrücke und Operatoren
- Zahlen und Zeichenketten
- Darstellung von Daten und Uhrzeiten
- Reguläre Ausdrücke
- Indexierte Sammlungen
- Schlüsselbasierte Sammlungen
- Arbeiten mit Objekten
- Verwendung von Klassen
- Verwendung von Promises
- Typisierte Arrays in JavaScript
- Iteratoren und Generatoren
- Resource management
- Internationalisierung
- JavaScript-Module
- Referenzen
Eingebaute Objekte
- AggregateError
- Array
- ArrayBuffer
- AsyncDisposableStack
- AsyncFunction
- AsyncGenerator
- AsyncGeneratorFunction
- AsyncIterator
- Atomics
- BigInt
- BigInt64Array
- BigUint64Array
- Boolean
- DataView
- Date
- decodeURI()
- decodeURIComponent()
- DisposableStack
- encodeURI()
- encodeURIComponent()
- Fehler
- escape()Veraltet
- eval()
- EvalError
- FinalizationRegistry
- Float16Array
- Float32Array
- Float64Array
- Function
- Generator
- GeneratorFunction
- globalThis
- Infinity
- Int8Array
- Int16Array
- Int32Array
- InternalErrorNicht standardisiert
- Intl
- isFinite()
- isNaN()
- Iterator
- JSON
- Map
- Math
- NaN
- Number
- Objekt
- parseFloat()
- parseInt()
- Promise
- Proxy
- RangeError
- ReferenceError
- Reflect
- RegExp
- Set
- SharedArrayBuffer
- String
- SuppressedError
- Symbol
- SyntaxError
- Temporal
- TypedArray
- TypeError
- Uint8Array
- Uint8ClampedArray
- Uint16Array
- Uint32Array
- undefined
- unescape()Veraltet
- URIError
- WeakMap
- WeakRef
- WeakSet
Ausdrücke und Operatoren
- Addition (+)
- Addition Assignment (+=)
- Zuweisungsoperator (=)
- async function expression
- async function* expression
- await
- Bitweises UND (&)
- Bitweises UND-Zuweisung (&=)
- Bitweises NICHT (~)
- Bitweises OR (|)
- Bitweises OR-Zuweisung (|=)
- Bitweises XOR (^)
- Bitweises XOR-Zuweisung (^=)
- class expression
- Komma-Operator (,)
- Bedingungsoperator (ternärer Operator)
- Dekrement (--)
- delete
- Destructuring
- Division (/)
- Division-Zuweisung (/=)
- Gleichheit (==)
- Exponentiation (**)
- Exponentialer Zuweisungsoperator (**=)
- function expression
- function* Ausdruck
- Größer als (>)
- Größer als oder gleich (>=)
- Gruppierungsoperator ( )
- import.meta
- import()
- in
- Increment (++)
- Ungleichheit (!=)
- instanceof
- Linksverschiebung (<<)
- Left shift assignment (<<=)
- Kleiner als (<)
- Weniger als oder gleich (<=)
- Logical AND (&&)
- Logisches UND Zuweisung (&&=)
- Logisches NICHT (!)
- Logisches ODER (||)
- Logical OR Zuweisung (||=)
- Multiplikation (*)
- Multiplikationszuweisung (*=)
- new
- new.target
- null
- Nullish-Zuweisung (??=)
- Nullish Coalescing-Operator (??)
- Objekt-Initialisierer
- Operatorpräzedenz
- Optional Chaining (?.)
- Property accessors
- Rest (%)
- Restzuweisung (%=)
- Rechtsschiebung (>>)
- Right shift assignment (>>=)
- Spread-Syntax (...)
- Strikte Gleichheit (===)
- Strikte Ungleichheit (!==)
- Subtraktion (-)
- Subtraktionszuweisung (-=)
- super
- this
- typeof
- Unäres Minus (-)
- Unäres Plus (+)
- Unsigned Right Shift (>>>)
- Unsigned Right Shift Zuweisung (>>>=)
- void-Operator
- yield
- yield*
Reguläre Ausdrücke
- Rückverweis: \1, \2
- Erfassungsgruppe: (...)
- Zeichenklassen-Escape: \d, \D, \w, \W, \s, \S
- Zeichenklasse: [...], [^...]
- Zeichenescape: \n, \u{...}
- Disjunction: |
- Input-Grenzfallassertion: ^, $
- Wörtliches Zeichen: a, b
- Vorwärts-Suche: (?=...), (?!...)
- Lookbehind Assertion: (?<=...), (?<!...)
- Modifier: (?ims-ims:...)
- Benannte Rückreferenz: \k<name>
- Benannte Erfassungsgruppe: (?<name>...)
- Nicht speichernde Gruppe: (?:...)
- Quantor: *, +, ?, {n}, {n,}, {n,m}
- Unicode-Zeichenklassen-Flucht: \p{...}, \P{...}
- Wildcard: .
- Wortgrenzen-Assertion: \b, \B
Fehler
- AggregateError: Kein Promise in Promise.any wurde erfüllt
- Fehler: Erlaubnis verweigert, um auf Eigenschaft "x" zuzugreifen
- InternalError: zu viel Rekursion
- RangeError: argument ist kein gültiger Codepunkt
- RangeError: BigInt division by zero
- RangeError: BigInt negativer Exponent
- RangeError: form muss einer von 'NFC', 'NFD', 'NFKC' oder 'NFKD' sein
- RangeError: ungültige Array-Länge
- RangeError: ungültiges Datum
- RangeError: precision is out of range
- RangeError: radix must be an integer
- RangeError: Wiederholungsanzahl muss geringer als unendlich sein
- RangeError: Wiederholungsanzahl muss nicht negativ sein
- RangeError: x kann nicht in BigInt konvertiert werden, da es keine ganze Zahl ist
- ReferenceError: "x" ist nicht definiert
- ReferenceError: Zuweisung an nicht deklarierte Variable "x"
- ReferenceError: kann auf die lexikalische Deklaration 'X' vor der Initialisierung nicht zugreifen
- ReferenceError: muss Superkonstruktor aufrufen, bevor 'this' im Konstruktor der abgeleiteten Klasse verwendet wird
- ReferenceError: super() zweimal im Konstruktor der abgeleiteten Klasse aufgerufen
- SyntaxError: 'arguments'/'eval' kann nicht definiert oder zugewiesen werden im Strict-Modus-Code
- SyntaxError: "0"-vorangestellte Oktalzahlen sind veraltet
- SyntaxError: "use strict" nicht erlaubt in Funktion mit nicht einfachen Parametern
- SyntaxError: "x" ist ein reservierter Bezeichner
- SyntaxError: \ am Ende des Musters
- SyntaxError: Eine Deklaration im Kopf einer for-of-Schleife darf keinen Initialisierer enthalten
- SyntaxError: Die Anwendung des 'delete'-Operators auf einen nicht qualifizierten Namen ist veraltet
- SyntaxError: arguments ist in Feldern nicht gültig
- SyntaxError: await ist nur in asynchronen Funktionen, asynchronen Generatoren und Modulen gültig
- SyntaxError: await/yield expression kann nicht im Parameter verwendet werden
- SyntaxError: Der `??`-Operator kann nicht unverklammert innerhalb von `||` und `&&`-Ausdrücken verwendet werden
- SyntaxError: Zeichenklassenescape kann in einem Bereich innerhalb der regulären Ausdrucksklasse nicht verwendet werden
- SyntaxError: continue muss innerhalb einer Schleife sein
- SyntaxError: doppelter Name einer Erfassungsgruppe im regulären Ausdruck
- SyntaxError: doppeltes formales Argument x
- SyntaxError: for-in Schleifenkopf-Deklarationen dürfen keine Initialisierer haben
- SyntaxError: Function-Anweisung erfordert einen Namen
- SyntaxError: Funktionen können nicht gekennzeichnet werden
- SyntaxError: getter und setter für privaten Namen #x sollten entweder beide statisch oder nicht statisch sein
- SyntaxError: Getter-Funktionen dürfen keine Argumente haben
- SyntaxError: identifier starts immediately after numeric literal
- SyntaxError: unerlaubtes Zeichen
- SyntaxError: import declarations may only appear at top level of a module
- SyntaxError: unvollständiger Quantifizierer im regulären Ausdruck
- SyntaxError: ungültige Zuweisung auf der linken Seite
- SyntaxError: Ungültige BigInt-Syntax
- SyntaxError: ungültiger Name der Erfassungsgruppe im regulären Ausdruck
- SyntaxError: ungültiges Zeichen in einer Klasse in regulärem Ausdruck
- SyntaxError: Ungültige Klassenmengenoperation im regulären Ausdruck
- SyntaxError: ungültiger Dezimal-Entweih in regulärem Ausdruck
- SyntaxError: ungültige Identitäts-Escape-Sequenz im regulären Ausdruck
- SyntaxError: ungültiger benannter Rückverweis in regulärem Ausdruck
- SyntaxError: Ungültiger Eigenschaftenname im regulären Ausdruck
- SyntaxError: ungültiger Bereich in Zeichensatz
- SyntaxError: ungültige Regexp-Gruppe
- SyntaxError: ungültiges reguläres Ausdrucks-Flag "x"
- SyntaxError: ungültige Unicode-Escape-Sequenz im regulären Ausdruck
- SyntaxError: JSON.parse: bad parsing
- SyntaxError: label not found
- SyntaxError: missing : after property id
- SyntaxError: missing ) after argument list
- SyntaxError: missing ) after condition
- SyntaxError: missing ] after element list
- SyntaxError: missing } nach Funktionskörper
- SyntaxError: fehlende } nach Eigenschaftsliste
- SyntaxError: fehlendes = in const-Deklaration
- SyntaxError: missing formal parameter
- SyntaxError: missing name after . operator
- SyntaxError: missing variable name
- SyntaxError: negated character class with strings in regular expression
- SyntaxError: Das Schlüsselwort new kann nicht mit einer optionalen Verkettung verwendet werden
- SyntaxError: nothing to repeat
- SyntaxError: numbers out of order in {} quantifier.
- SyntaxError: Oktale Escape-Sequenzen können nicht in ungetaggten Template-Literalen oder in Strict-Modus-Code verwendet werden
- SyntaxError: Parameter nach Rest-Parameter
- SyntaxError: private fields können nicht gelöscht werden
- SyntaxError: Property-Name __proto__ erscheint mehr als einmal im Objektliteral
- SyntaxError: raw bracket is not allowed in regular expression with unicode flag
- SyntaxError: Neudeklaration des formalen Parameters "x"
- SyntaxError: Verweis auf ein nicht deklariertes privates Feld oder eine Methode #x
- SyntaxError: Rest-Parameter darf keinen Standardwert haben
- SyntaxError: return not in function
- SyntaxError: Setterfunktionen müssen ein Argument haben
- SyntaxError: string literal enthält einen nicht-escaped Zeilenumbruch
- SyntaxError: super() ist nur in abgeleiteten Klassenkonstruktoren gültig
- SyntaxError: Getaggte Vorlage kann nicht mit optionaler Verkettung verwendet werden
- SyntaxError: Unerwartetes '#' außerhalb des Klassenkörpers verwendet
- SyntaxError: Unerwartetes Token
- SyntaxError: Ein nicht gekennzeichneter break muss innerhalb einer Schleife oder eines switch sein
- SyntaxError: unparenthesized unary expression can't appear on the left-hand side of '**'
- SyntaxError: Verwendung von Super-Eigenschafts-/Mitgliedszugriffen nur in Methoden oder eval-Code innerhalb von Methoden zulässig
- SyntaxError: Verwendung von //@ zur Angabe von sourceURL-Pragmas ist veraltet. Verwenden Sie //# stattdessen
- TypeError: 'caller', 'callee' und 'arguments'-Eigenschaften dürfen nicht zugegriffen werden
- TypeError: 'x' ist nicht iterierbar
- TypeError: "x" ist (nicht) "y"
- TypeError: "x" ist kein Konstruktor
- TypeError: "x" ist keine Funktion
- TypeError: "x" ist kein nicht-null-Objekt
- TypeError: "x" ist schreibgeschützt
- TypeError: already executing generator
- TypeError: BigInt-Wert kann nicht in JSON serialisiert werden
- TypeError: Das Aufrufen eines eingebauten X-Konstruktors ohne new ist verboten
- TypeError: can't access/set private field or method: object is not the right class
- TypeError: kann Eigenschaft "x" nicht auf "y" zuweisen: kein Objekt
- TypeError: kann BigInt nicht in number umwandeln
- TypeError: kann x nicht in BigInt umwandeln
- TypeError: Kann Eigenschaft "x" nicht definieren: "obj" ist nicht erweiterbar
- TypeError: can’t delete non-configurable array element
- TypeError: can't redefine non-configurable property "x"
- TypeError: kann Prototyp dieses Objekts nicht setzen
- TypeError: can't set prototype: it would cause a prototype chain cycle
- TypeError: cannot use 'in' operator to search for 'x' in 'y'
- TypeError: Klassenkonstruktoren müssen mit 'new' aufgerufen werden
- TypeError: cyclic object value
- TypeError: abgeleiteter Klassenkonstruktor hat ungültigen Wert x zurückgegeben
- TypeError: getting private setter-only property
- TypeError: Es ist ein Fehler, ein Objekt mit privaten Feldern/Methoden zweimal zu initialisieren
- TypeError: ungültiges 'instanceof'-Operand 'x'
- TypeError: ungültiges Array.prototype.sort Argument
- TypeError: ungültige Zuweisung zu const "x"
- TypeError: Iterator/AsyncIterator-Konstruktor kann nicht direkt verwendet werden
- TypeError: matchAll/replaceAll muss mit einem globalen RegExp aufgerufen werden
- TypeError: Es werden mehr Argumente benötigt
- TypeError: null/undefined hat keine Eigenschaften
- TypeError: Eigenschaft "x" ist nicht konfigurierbar und kann nicht gelöscht werden
- TypeError: Reduce von leerem Array ohne Anfangswert
- TypeError: setting getter-only property "x"
- TypeError: WeakSet-Schlüssel/WeakMap-Wert 'x' muss ein Objekt oder ein nicht registriertes Symbol sein
- TypeError: X.prototype.y wurde auf einem inkompatiblen Typ aufgerufen
- URIError: malformed URI sequence
- Warnung: -file- wird ein //# sourceMappingURL zugewiesen, aber es ist bereits eines vorhanden
- Warnung: unerreichbarer Code nach dem return-Statement