Was bedeutet "Javascript: void (0)"?

1378
<a href="javascript:void(0)" id="loginlink">login</a>

Ich habe so hrefviele Male gesehen, aber ich weiß nicht genau, was das bedeutet.

Oh mein Gott
quelle
12
javascript:ist eines der vielen URI-Schemata: en.wikipedia.org/wiki/URI_scheme , like data:.
Ciro Santilli 法轮功 病毒 审查 六四 事件 23
3
Sie können nur href="javascript:"für den gleichen Zweck verwenden. Wie in der Antwort auf diese Frage angegeben , war der void(0)Teil ursprünglich für frühere Versionen von Browsern gedacht, bei denen die javascript:URI-Behandlung unterschiedlich war. Aber jetzt konnte ich nicht einmal eine Version finden, in der die Kurzschrift nicht funktionieren würde, zumindest IE7 behandelt dies korrekt.
Benutzer
1
Ich habe auch href = "javascript: //" gesehen, ist das besser?
Lichtschwert
href = "javascript: //" funktioniert bei mir nicht void (0) funktioniert einwandfrei.
Sandip

Antworten:

1041

Der voidOperator wertet den angegebenen Ausdruck aus und kehrt dann zurück undefined.

Der voidOperator wird häufig nur verwendet, um den undefinedprimitiven Wert zu erhalten, normalerweise unter Verwendung von " void(0)" (was " void 0" entspricht). In diesen Fällen undefined kann stattdessen die globale Variable verwendet werden (vorausgesetzt, sie wurde keinem nicht standardmäßigen Wert zugewiesen).

Hier wird eine Erklärung gegeben: voidOperator .

Der Grund, warum Sie dies mit hrefeinem Link tun möchten, ist, dass normalerweise eine javascript:URL den Browser zu einer Nur-Text-Version des Ergebnisses der Auswertung dieses JavaScript umleitet. Wenn das Ergebnis jedoch ist undefined, bleibt der Browser auf derselben Seite. void(0)ist nur ein kurzes und einfaches Skript, das ausgewertet wird undefined.

rahul
quelle
9
Was bedeutet es, wenn href einen "undefinierten primitiven Wert" erhält?
Omg
7
"Normalerweise leitet eine Javascript: URL den Browser zu einer Nur-Text-Version des Ergebnisses der Auswertung dieses Javascript um." Können Sie hier ein Beispiel machen? Ich habe eine solche Verwendung noch nie gesehen.
Omg
87
Ein Beispiel dafür, wovon Phoenix spricht, ist <a href="javascript: dosomething();"> JETZT TUN! </a>. Wenn dosomething false zurückgibt, führt das Klicken auf den Link einfach dazu, dass der Browser die Seite verlässt und "false" anzeigt. Jedoch ... <a href="javascript: dosomething(); void(0)"> JETZT TUN! </a> vermeidet das Problem. Fahren Sie fort und fügen Sie Javascript ein: 1 + 1; in die Adressleiste Ihres Browsers. Der Browser sollte "2"
Breton
9
Weil void ein unärer Operator ist. Void ist weder ein Wert noch eine Funktion. Es benötigt einen Wert, um rechts davon zu arbeiten, sonst wird ein Fehler ausgegeben.
Bretonischer
14
versuchen Sie in der Fehlerkonsole zu suchen? Es wird definitiv ein Syntaxfehler ausgelöst. Es ist ungültiges Javascript. Douglas Crockford empfiehlt, sich wegen der unären Verwirrung von Operator / Funktion / Wert von der Leere fernzuhalten.
Bretonischer
436

Zusätzlich zur technischen Antwort javascript:voidbedeutet dies , dass der Autor es falsch macht.

Es gibt keinen guten Grund, eine javascript:Pseudo-URL (*) zu verwenden. In der Praxis führt dies zu Verwirrung oder Fehlern, wenn jemand Dinge wie "Lesezeichen-Link", "Link in einem neuen Tab öffnen" usw. ausprobiert. Dies passiert ziemlich oft, jetzt haben sich die Leute daran gewöhnt, mit der mittleren Maustaste auf einen neuen Tab zu klicken: Es sieht aus wie ein Link, Sie möchten ihn in einem neuen Tab lesen, aber es stellt sich heraus, dass es sich überhaupt nicht um einen echten Link handelt. und gibt unerwünschte Ergebnisse wie eine leere Seite oder einen JS-Fehler, wenn Sie mit der mittleren Maustaste klicken.

<a href="#">ist eine häufige Alternative, die möglicherweise weniger schlecht ist. Sie müssen jedoch daran denken, return falsevon Ihrem onclickEreignishandler zu erfahren, dass der Link nicht verfolgt wird und Sie zum oberen Rand der Seite scrollen.

In einigen Fällen kann es einen tatsächlich nützlichen Ort geben, auf den der Link verweist. Wenn Sie beispielsweise ein Steuerelement haben, auf das Sie klicken können, um ein zuvor ausgeblendetes Steuerelement zu öffnen <div id="foo">, ist es sinnvoll, <a href="#foo">eine Verknüpfung zu diesem Steuerelement zu verwenden . Oder wenn es eine Nicht-JavaScript-Methode gibt, mit der Sie dasselbe tun können (z. B. 'thispage.php? Show = foo', mit der foo zunächst sichtbar gemacht wird), können Sie darauf verlinken.

Wenn ein Link nur auf ein Skript verweist, handelt es sich nicht wirklich um einen Link und sollte nicht als solcher gekennzeichnet werden. Die übliche Vorgehensweise wäre der hinzufügen onclickzu einem <span>, <div>oder ein , <a>ohne eine hrefin irgendeiner Weise und Stil es , um es Sie können es zu machen deaktivieren Sie. Dies hat StackOverflow [zum Zeitpunkt des Schreibens getan; jetzt benutzt es href="#"].

Dies hat den Nachteil, dass Sie die Tastaturkontrolle verlieren, da Sie nicht auf ein span / div / bare-a tippen oder es mit Leerzeichen aktivieren können. Ob dies tatsächlich ein Nachteil ist, hängt davon ab, welche Art von Aktion das Element ausführen soll. Mit etwas Aufwand können Sie versuchen, die Interaktionsfähigkeit der Tastatur nachzuahmen, indem Sie tabIndexdem Element ein hinzufügen und auf einen Space-Tastendruck warten. Aber es wird niemals das reale Browserverhalten zu 100% reproduzieren, nicht zuletzt, weil verschiedene Browser unterschiedlich auf die Tastatur reagieren können (ganz zu schweigen von nicht visuellen Browsern).

Wenn Sie wirklich ein Element möchten, das kein Link ist, aber wie gewohnt per Maus oder Tastatur aktiviert werden kann, möchten Sie ein <button type="button">(oder <input type="button">ist genauso gut für einfache Textinhalte). Sie können es jederzeit mit CSS neu formatieren, sodass es eher wie ein Link als wie eine Schaltfläche aussieht, wenn Sie möchten. Aber da es sich wie ein Knopf verhält, sollten Sie ihn wirklich so markieren.

(*: jedenfalls beim Erstellen von Websites. Offensichtlich sind sie für Lesezeichen nützlich. javascript:Pseudo-URLs sind eine konzeptionelle Bizarrheit: Ein Locator, der nicht auf einen Standort verweist, sondern aktiven Code innerhalb des aktuellen Standorts aufruft. Sie haben massive Sicherheit verursacht Probleme sowohl für Browser als auch für Webanwendungen und sollten niemals von Netscape erfunden worden sein.)

Bobince
quelle
7
Zusätzlich zu dem hervorragenden Beitrag von @bobince: Ich habe vor ein paar Monaten einige Untersuchungen zur browserübergreifenden Tastaturnavigierbarkeit von hrefs durchgeführt, einschließlich Macken und Nebenwirkungen. Einige von Ihnen finden es vielleicht nützlich: jakub-g.github.com/accessibility/onclick
jakub.g
2
@ThinkBonobo: SO hat sich seit 2009 irgendwann geändert! Aktualisiert.
Bobince
59
Dies ist eine Meinung und beantwortet die Frage nicht. void(0)wird in vielen Fällen benötigt; "#" ist ein Hack, der eine ganze Reihe von Problemen mit sich bringt (es würde in der App, die ich schreibe, nicht funktionieren, die mich auf diese Seite gebracht hat).
felwithe
12
Ich stimme @feltwithe zu. Warum andere dazu zwingen, "es auf eine bestimmte Weise zu tun"? In 15 Jahren Programmierung muss ich noch sehen, wie das Motto "Es sollte immer so gemacht werden" die Leute nicht zu einem Durcheinander ihrer eigenen Art führt
Steven de Salas
4
Die Verwendung der Fragment-ID ist aus UX-Sicht eine schlechte Idee, da das Dokument dadurch an den Anfang der Seite springt, sofern preventDefaultes nicht verwendet wird. Bitte tun Sie dies nicht, wenn ein Anker als Schaltfläche in einem Formular verwendet wird.
Josh Habdas
124

Es bedeutet, dass es nichts tun wird. Es ist ein Versuch, den Link nirgendwo "navigieren" zu lassen. Aber es ist nicht der richtige Weg.

Sie sollten eigentlich nur return falsefür den onclickFall, so:

<a href="#" onclick="return false;">hello</a>

Normalerweise wird es verwendet, wenn der Link eine 'JavaScript-y'-Sache macht. Zum Beispiel ein AJAX-Formular veröffentlichen oder ein Bild austauschen oder was auch immer. In diesem Fall machen Sie einfach die Funktion, die als return bezeichnet wird false.

Um Ihre Website jedoch vollständig zu optimieren, fügen Sie im Allgemeinen einen Link hinzu, der dieselbe Aktion ausführt, wenn die Person, die sie durchsucht, JavaScript nicht ausführt.

<a href="backup_page_displaying_image.aspx"
   onclick="return coolImageDisplayFunction();">hello</a>
Mittags Seide
quelle
33
nein nein - return false stoppt das Standardverhalten, so dass das # nie erscheint
Magnar
22
Das Javascript: URL-Protokoll ist ein Defacto-Standard, kein echter Standard. Also das href = "#" onclick = "return false;" ist standardkonform, href = "javascript: void (0)" nicht, da es keinen offiziellen Standard gibt, der angibt, was das tun soll.
Bretonischer
10
Darüber hinaus mag Douglas Crockford keine Leere, also wird sich jslint darüber beschweren. Da void ein Operator und kein Wert ist, ist es im Grunde genommen verwirrend und wirft viele Fragen wie diese auf. Vermeiden Sie es lieber ganz. Haha.
Bretonischer
4
Brandon: Siehe Brentons Antworten. Die Art und Weise, die ich empfehle, wird am meisten unterstützt, und wie ich im zweiten Teil meines Beitrags sagte, werden Sie auf einer "richtigen" Site niemals "#" verwenden, da Sie Fallback-Systeme bereitstellen, um einen Mangel an zu beheben Javascript.
Mittagsseide
19
+1 für das absolut großartige Beispiel. Auch wenn Sie kein statisches HTML-Fallback für das haben, was Sie in JavaScript tun, können Sie immer so etwas tun <a href="enableJavaScriptToSeeMyCompletelyAwesomeSite.html" onclick="completelyAwesome();return false;">.
Grant Wagner
73

Es gibt einen RIESIGEN Unterschied im Verhalten von "#" gegenüber Javascript: void

"#" führt Sie zum oberen Rand der Seite, während "javascript: void (0);" nicht.

Dies ist sehr wichtig, wenn Sie dynamische Seiten codieren. Der Benutzer möchte nicht nach oben zurückkehren, nur weil er auf einen Link auf der Seite geklickt hat.

Salvin Francis
quelle
26
@Salvin: Das Verhalten beim Scrollen zum Seitenanfang kann unterdrückt werden, indem Sie falsezum Ereignishandler zurückkehren: onclick="doSomething();return false;"oder wenn Sie doSomething()zurückkehren false, können Sie verwenden onclick="return doSomething();".
Grant Wagner
41
@GrantWagner - Oder 5 Jahre später e.preventDefault().
Trysis
1
Sie könnten diese Antwort zu bearbeiten / löschen wollen da "#"nicht nicht nach oben bewegen , wenn Sie false zurück.
Navin
4
@ Navin Sie sind richtig, aber das ist jetzt eine veraltete Praxis. Der Kommentar von trysis wird jetzt als der richtige Weg angesehen.
Tim Seguine
66

Es ist eine sehr beliebte Methode zum Hinzufügen von JavaScript-Funktionen zu HTML-Links.
Beispiel: Die [Print]Links, die Sie auf vielen Webseiten sehen, sind wie folgt geschrieben:

<a href="javascript:void(0)" onclick="callPrintFunction()">Print</a>

Warum brauchen wir hrefVerweilen onclickallein kann den Job zu erledigen? Denn wenn Benutzer mit der Maus über den Text 'Drucken' fahren, wenn keine vorhanden ist href, ändert sich der Cursor in ein Caret (ꕯ) anstelle eines Zeigers (👆). Nur wenn Sie hrefein aTag haben, wird es als Hyperlink validiert.

Eine Alternative zu href="javascript:void(0);"ist die Verwendung von href="#". Für diese Alternative muss JavaScript nicht im Browser des Benutzers aktiviert sein, daher ist sie kompatibler.

Huy - Vuong Do Thanh
quelle
7
Auch ist nichts Nützliches nützlich, wenn Javascript deaktiviert ist.
Jasen
12
Sie müssen hrefden Zeiger der zeigenden Hand nicht erhalten. Alles was es braucht ist ein bisschen CSS.
John Montgomery
1
Warum würden Sie nicht die JavaScript-Funktion in die href setzen, sondern den onclick?
Siddhartha Gandhi
2
Ich stimme @Sid zu - wenn Sie es verwenden, um eine Javascript-Funktion auszulösen, <a href="javascript:callPrintFunction()">ist es sauberer (obwohl es wahrscheinlich buttoneher ein aNchor als ein Nchor sein sollte, wenn es Sie eigentlich nirgendwohin bringt).
DaveMongoose
href="#"kann zu bösen Überraschungen führen - wie abgebrochene xhr-Anfragen, die zufällig durch Klicken auf diesen Link aufgerufen werden. Ich hatte kürzlich Schwierigkeiten, eine Website zu debuggen, bei der die angeforderte OIDC-Anmeldung abgebrochen wurde, wenn sich der Benutzer zufällig an einer Adresse befand, die nicht das Stammverzeichnis der Website war. #href veranlasste es, die Adresse neu zu laden, bevor die xhr-Anfrage abgeschlossen wurde.
JustAMartin
44

Sie sollten immer eine href auf Ihren a- Tags haben. Das Aufrufen einer JavaScript-Funktion, die 'undefined' zurückgibt, reicht völlig aus. Dies gilt auch für die Verknüpfung mit '#'.

Bei Anker-Tags in Internet Explorer 6 ohne href wird der a:hoverStil nicht angewendet.

Ja, es ist schrecklich und ein kleines Verbrechen gegen die Menschlichkeit, aber auch Internet Explorer 6 im Allgemeinen.

Ich hoffe das hilft.

Internet Explorer 6 ist tatsächlich ein schweres Verbrechen gegen die Menschlichkeit.

jscharf
quelle
25

Es ist erwähnenswert, dass manchmal null 0 angezeigt wird, wenn nach undefinierten Zeichen gesucht wird, einfach weil weniger Zeichen erforderlich sind.

Zum Beispiel:

something === undefined

vs.

something === void 0

Einige Minifizierungsmethoden ersetzen aus diesem Grund undefiniert durch void 0.


quelle
10
Ein bemerkenswertes Beispiel ist TypeScript ( Live-Beispiel ), das Standardparameterwerte kompiliert, gegen die geprüft werden soll void 0. Der Unterschied von 3 Zeichen summiert sich schnell, wenn viele Methoden Standardparameterwerte verwenden.
John Weisz
1
"Einige Minifizierungsmethoden ersetzen aus diesem Grund undefiniert durch void 0." Endlich verstehe ich es! Danke @squall für die gründliche Antwort.
Ahmed Mahmoud
22

Verwendung von javascript:void(0)bedeutet, dass der Autor des HTML-Codes das Ankerelement anstelle des Schaltflächenelements missbraucht.

Anker-Tags werden häufig mit dem Ereignis onclick missbraucht, um Pseudo-Schaltflächen zu erstellen, indem href auf "#" oder "javascript: void (0)" gesetzt wird, um zu verhindern, dass die Seite aktualisiert wird. Diese Werte verursachen unerwartetes Verhalten beim Kopieren / Ziehen von Links, Öffnen von Links in neuen Registerkarten / Fenstern, Lesezeichen setzen und wenn JavaScript noch heruntergeladen wird, Fehler auftreten oder deaktiviert werden. Dies vermittelt auch falsche Technologien für unterstützende Technologien (z. B. Screenreader). In diesen Fällen wird empfohlen, <button>stattdessen a zu verwenden. Im Allgemeinen sollten Sie einen Anker nur für die Navigation unter Verwendung einer geeigneten URL verwenden.

Quelle: MDN- <a>Seite .

Ronnie Royston
quelle
4
+1 für das Aufrufen von semantischem HTML zu einer alten Frage ... Links gehen an Orte, Schaltflächen erledigen Dinge - wenn wir nicht möchten, dass sie wie eine Schaltfläche aussehen, sollten wir nur das Styling löschen.
Kevlarr
Die große Ausnahme bilden Image Maps, für die möglicherweise JavaScript ausgeführt werden muss. und da es sich nicht um eine Schaltfläche handelt, sondern um eine Verknüpfung mit polygonalen Grenzen, ist dies der "einzige" Weg.
17

voidist ein Operator, mit dem ein undefinedWert zurückgegeben wird, sodass der Browser keine neue Seite laden kann.

Webbrowser versuchen, alles, was als URL verwendet wird, zu verwenden und zu laden, es sei denn, es handelt sich um eine JavaScript-Funktion, die null zurückgibt. Wenn wir zum Beispiel auf einen Link wie diesen klicken:

<a href="javascript: alert('Hello World')">Click Me</a>

Dann wird eine Warnmeldung angezeigt, ohne dass eine neue Seite alertgeladen wird. Dies liegt daran, dass eine Funktion einen Nullwert zurückgibt. Dies bedeutet, dass der Browser beim Versuch, eine neue Seite zu laden, null sieht und nichts zu laden hat.

Ein wichtiger Punkt beim Void-Operator ist, dass er einen Wert benötigt und nicht alleine verwendet werden kann. Wir sollten es so verwenden:

<a href="javascript: void(0)">I am a useless link</a>
Amr
quelle
1
Ich habe gesehen, dass Leute Javascript verwenden: null statt void ... aber das ist ein Problem. Chrome null funktioniert, in Firefox wird versucht, die Seite null zu laden. Schön, dass Sie aktualisiert haben. Interessanter Fehler.
Gavin Pickin
Ich habe einige andere Verwendungen in einer Codebasis wie Javascript: null gefunden, aber mit Javascript: null (), das undefiniert ist, so dass es funktioniert.
Gavin Pickin
1
Im Grunde ist es also wie jquerys prevendDefault und return false?
Robert Rocha
16

Um dieses Konzept zu verstehen, sollte man zuerst den void-Operator in JavaScript verstehen.

Die Syntax für den void-Operator lautet: void «expr»ausgewertet expr und gibt undefiniert zurück.

Wenn Sie void als Funktion implementieren, sieht es folgendermaßen aus:

function myVoid(expr) {
    return undefined;
}

Dieser void-Operator hat eine wichtige Verwendung: das Verwerfen des Ergebnisses eines Ausdrucks.

In einigen Situationen ist es wichtig, undefiniert im Gegensatz zum Ergebnis eines Ausdrucks zurückzugeben. Dann kann void verwendet werden, um dieses Ergebnis zu verwerfen. Eine solche Situation betrifft Javascript: URLs, die für Links vermieden werden sollten, aber für Lesezeichen nützlich sind. Wenn Sie eine dieser URLs besuchen, ersetzen viele Browser das aktuelle Dokument durch das Ergebnis der Auswertung des URL-Inhalts, jedoch nur, wenn das Ergebnis nicht undefiniert ist. Wenn Sie also ein neues Fenster öffnen möchten, ohne den aktuell angezeigten Inhalt zu ändern, können Sie Folgendes tun:

javascript:void window.open("http://example.com/")
Gopal Yadav
quelle
2
Vielen Dank, dass Sie genau geklärt haben, wofür das Argument "nichtig" ist! In den anderen Antworten war nicht klar, nur dass "Leere ein Argument braucht".
dbeachy1
Gute Antwort, aber ein Detail, die void-Implementierung wird ungefähr so aussehen: function myVoid(expr) { expr(); return undefined; } Sie haben vergessen, expr ()
Juanma Menendez
1
@ Juanma Menendez: nicht wahr. exprwird bereits beim myVoid()Aufruf ausgewertet (das Ergebnis dieses Ausdrucks wird als Parameter übergeben)
Udo G
@UdoG Ich bin neugierig, woher kennst du diese Männer? Kannst du bitte Erklären.
Juanma Menendez
@JuanmaMenendez: Ausdrücke in Funktionsparametern werden immer vor dem Aufruf der Funktion selbst ausgewertet. Entschuldigung, ich habe kein Dokument zur Hand, das dies klar macht, aber versuchen Sie es selbst: function() { alert("foo"); }ist ein gültiger Ausdruck . void(function() { alert("foo"); })Renditen undefinedund ist nicht zeigen die Warnung, während myVoid(function() { alert("foo"); })bedeutet (in Ihrer Version, nicht die von Gopal Yadav ).
Udo G
14

Der voidOperator wertet den angegebenen Ausdruck aus und gibt dann undefiniert zurück. Es wird vermieden, die Seite zu aktualisieren.

Abhay Singh
quelle
9

Webentwickler verwenden, javascript:void(0)weil dies der einfachste Weg ist, das Standardverhalten von aTags zu verhindern . void(*anything*)kehrt zurück undefinedund es ist ein falscher Wert. und einen falsy Wertes Rückkehr ist wie return falsein onclickFall - aTag , das sein Standardverhalten zu verhindern.

Daher denke ich, dass dies javascript:void(0)der einfachste Weg ist, um das Standardverhalten von aTags zu verhindern .

Mohamad Shiralizadeh
quelle
8

Für einen Link muss ein HREF-Ziel angegeben werden, damit er als verwendbares Anzeigeobjekt verwendet werden kann.

Die meisten Browser analysieren kein erweitertes JavaScript in einem

<A HREF="" 

Tag wie:

<A href="JavaScript:var elem = document.getElementById('foo');" 

Da das HREF-Tag in den meisten Browsern keine Leerzeichen zulässt oder Leerzeichen in% 20 konvertiert, entspricht das HEX einem Leerzeichen, wodurch Ihr JavaScript für den Interpreter absolut unbrauchbar wird.

Wenn Sie also ein A HREF-Tag zum Ausführen von Inline-JavaScript verwenden möchten, müssen Sie einen gültigen Wert für HREF FIRST angeben, der nicht zu komplex ist (kein Leerzeichen enthält), und dann das JavaScript in einem Ereignisattribut-Tag wie OnClick bereitstellen , OnMouseOver, OnMouseOut usw.

Die typische Antwort lautet:

<A HREF="#" onclick="var elem = document.getElementById('foo');">Get the object</a>

Dies funktioniert einwandfrei, aber die Seite springt nach oben, da das Nummernzeichen / Hash-Tag sie dazu auffordert.

Wenn Sie lediglich ein Nummernzeichen / Hash-Tag in einem A HREF-Tag angeben, wird der Stammanker angegeben. Dies ist immer standardmäßig der obere Rand der Seite. Sie können einen anderen Speicherort angeben, indem Sie das NAME-Attribut in einem A HREF-Tag angeben.

<A NAME='middleofpage'></A>

Sie können dann Ihr A HREF-Tag ändern, um zu 'middleofpage' zu springen und das JavaScript im OnClick-Ereignis auszuführen, sobald dies wie folgt geschieht:

<A HREF="#middleofpage" onclick="var elem = document.getElementById('foo');">Get the object</a>

Es wird VIELE Male geben, in denen Sie nicht möchten, dass dieser Link herumspringt, also können Sie zwei Dinge tun:

<A HREF="#thislinkname" name='thislinkname' onclick="var elem = document.getElementById('foo');">Get the object</a>

Jetzt wird es beim Klicken nirgendwo hingehen, aber es könnte dazu führen, dass sich die Seite aus dem aktuellen Ansichtsfenster neu zentriert. Das ist nicht schön. Was ist der beste Weg, um Inline-Javascript mit einem A HREF bereitzustellen, ohne jedoch die oben genannten Schritte ausführen zu müssen? JavaScript: void (0);

<A HREF="JavaScript:void(0);" onclick="var elem = document.getElementById('foo');">Get the object</a>

Dies weist den Browser an, NIRGENDWO zu gehen, aber stattdessen das gültige JavaScript auszuführen: void (0); Funktionieren Sie zuerst im HREF-Tag, da es kein Leerzeichen enthält und nicht als URL analysiert wird. Es wird stattdessen vom Compiler ausgeführt. VOID ist ein Schlüsselwort, das, wenn es mit einem Parameter von 0 angegeben wird, UNDEFINED zurückgibt und keine weiteren Ressourcen verwendet, um einen Rückgabewert zu verarbeiten, der ohne Angabe der 0 auftreten würde (es ist speicherverwaltungs- / leistungsfreundlicher).

Als nächstes wird der OnClick ausgeführt. Die Seite bewegt sich nicht, es passiert nichts in Bezug auf die Anzeige.


quelle
+1 für all die verschiedenen Möglichkeiten , ein Anker , wie dies zu erklären könnten behandelt werden. Ich bin jedoch der Meinung, dass ein <a>Element immer irgendwohin gehen muss ; Wenn es nur auf der Seite ist, um Javascript auszuführen, <button>sollte stattdessen a verwendet werden. Die Verwendung <button>ist sowohl semantischer als auch erspart Ihnen diese ganze Debatte darüber, was Sie in einen Anker hacken sollen href. Bearbeiten: Es sieht so aus, als ob die Antwort von @Ronnie Royston unten dieses Argument bereits behandelt hat.
Rabadash8820
1

JavaScript: URLs beiseite; Hier kann void nützlich sein, um kürzeren Code zu schreiben.

var error1 = false,
    error2 = false,
    error3 = false;

function error1() {

  error1 = true;
}

function myFunction() {

  // You can easily return and call a function at once, if you don't care about myFunction's return value
  if (!someCondition1)
    return error1();

  // What if you want to set a value first?
  if (!someCondition2) {
    error2 = true;
    return
  }

  // Shortest way to return and set a value at once
  if (!someCondition3)
    return void(error3 = true);

  // More code goes here
}
Maciej Krawczyk
quelle
Es wäre schön, wenn die Downvoter zumindest sagen könnten, warum sie downvotiert haben. Ich weiß, dass es nicht um das Thema der Frage geht, aber ich denke an alle Leute, die aus den Suchergebnissen hierher kommen.
Maciej Krawczyk