2009-03-20 16 views
43

Ich habe einige Leute gesehen, die void Operator in ihrem Code verwenden. Ich habe dies auch in href Attribute gesehen: javascript:void(0) die scheint nicht besser als javascript:;Was ist der Punkt des Void-Operators in JavaScript?

Also, was ist die Rechtfertigung der Verwendung des void Operator?

+3

void ist ein Operator, der nach dem Auswerten eines Ausdrucks keinen Wert zurückgibt. Sie müssen nicht "(" und ")" verwenden, damit er funktioniert. – Cleiton

+0

sizeof ist das gleiche in C - aber dieser Code ist viel klarer, wenn Klammern verwendet werden. – olliej

+0

'void' wird selten verwendet. In ES5 gilt es als veraltet. Nach Auswertung seines Operanden gibt es 'undefined' zurück – jjpcondor

Antwort

46

Explanation of its use in links:

<snip>

Dies ist der Grund, dass Bookmarklets oft den Code in Leere wickeln() oder eine anonyme Funktion, die nicht Rückkehr alles tut, um den Browser zu stoppen aus Versuchen, das Ergebnis anzuzeigen, das Bookmarklet auszuführen. Für Beispiel:

javascript:void(window.open("dom_spy.html")) 

Wenn Sie direkt Code verwenden, etwas (ein neues Fenster Instanz in dieser Fall) zurückkehrt, wird der Browser Anzeige von bis , dass am Ende:

javascript:window.open("dom_spy.html"); 

In Firefox der oben zeigt folgendes an:

[object Window] 
+0

Siehe auch [void operator MDN docs] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void). –

10

Beachten Sie Folgendes:

<a href="javascript:void(fish=document.getElementById('foo').value);void(document.getElementById('bar').value=fish);">With Void</a> 

<a href="javascript:fish=document.getElementById('foo').value;document.getElementById('bar').value=fish;">Without Void</a> 

<input type="text" id="foo" value="one fish" /> 
<input type="text" id="bar" value="no fish" /> 

Der erste Link, um die Werte der Textfelder tauschen wird. Der zweite Link öffnet eine neue Seite mit dem Text "Ein Fisch". Wenn Sie einen javascript: link verwenden, interpretiert der Browser die Minute, in der ein Ausdruck etwas anderes als null oder undefined zurückgibt, was der Link tun sollte. Wenn Sie alle Ausdrücke/Anweisungen in eine void()-Funktion einschließen, stellen Sie sicher, dass Ihr gesamtes Code-Snippet ausgeführt wird. Heutzutage ist dies vor allem in Bookmarklets von Nutzen, da die Verwendung eines onclick Attributs oder das Einrichten von Event Handlern in separaten Javascript Blöcken/Dateien die "Norm" ist.

Wie für javascript: vs. javascript:void(), ist die erste Aussage mehrdeutig. Du sagst: "Hey, ich möchte etwas Javascript ausführen", aber dann gibst du keinen Code an. Es ist nicht unbedingt klar, was der Browser hier tun soll. Mit der zweiten Aussage sagst du "hey, mach etwas Javascript", und dein Code kehrt schließlich undefiniert zurück, was der Browser weiß, bedeutet "tue nichts".

Seit ich hier bin, werde ich auch darauf hinweisen, dass die Verwendung von javascript: oder javascript:void(); bei den meisten Leuten, die sich um Markup kümmern, in Ungnade gefallen ist. Besser ist es, wenn Ihr onclick-Handler false zurückgibt und der Link auf eine Seite/Ressource zeigt, die für Leute, die Javascript deaktiviert haben, sinnvoll ist oder einen JavaScript-Blocker wie NoScript verwendet.

+0

Die Frage Autor schrieb "javascript :;", nicht "javascript:". Also wäre es in diesem Fall nicht mehrdeutig, oder? –

+0

Gibt eine leere Anweisung false zurück oder gibt sie true zurück und zeigt an, dass die Anweisung erfolgreich ausgeführt wurde? –

+1

Warum sollte eine leere Anweisung etwas zurückgeben? –

4

Der undefined Wert war nicht direkt in JavaScript bis ES1.3 zugänglich.

Ein Operator void <expression> wurde daher eingeschlossen, um Zugriff auf diesen Wert zu ermöglichen.

Es ist manchmal nützlich, insbesondere bei der Arbeit mit der Web-API (z. B. Ereignisbehandlungsroutinen) sicherzustellen, dass das Ergebnis eines Ausdrucks konsistent ist.

Wenn die Eigenschaft undefined dem globalen Objekt in ES1.3 hinzugefügt wurde, wurde das Dienstprogramm void nicht offensichtlich.

Daher Ihre Frage.

+0

Downvoter, bitte erklären? – Ben

Verwandte Themen