Mögliches Duplikat:
Was bedeutet "Javascript: void (0)"?
Als ich den Quellcode von Backbone.js durchlas, sah ich Folgendes:
validObj[attr] = void 0;
Was ist void 0
? Wozu dient es hier?
void 0
?void
[MDN] ist ein Präfix-Schlüsselwort, das ein Argument verwendet und immer undefined
zurückgibt.
Beispiele
void 0
void (0)
void "hello"
void (new Date())
//all will return undefined
Es scheint ziemlich nutzlos, nicht wahr? Wenn es immer undefined
zurückgibt, was ist falsch daran, nur undefined
selbst zu verwenden?
In einer perfekten Welt könnten wir einfach undefined
sicher verwenden: Es ist viel einfacher und verständlicher als void 0
. Aber falls Sie es noch nie bemerkt haben, ist dies keine perfekte Welt , besonders wenn es um Javascript geht.
Das Problem bei der Verwendung von undefined
war, dass undefined
kein reserviertes Wort ist ( es ist eigentlich eine Eigenschaft des globalen Objekts [wtfjs] ). Das heißt, undefined
ist ein zulässiger Variablenname. Sie können ihm also nach Belieben einen neuen Wert zuweisen.
alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"
Hinweis: Dieses Problem tritt in keiner Umgebung mehr auf, die ECMAScript 5 oder höher unterstützt (dh in der Praxis überall, außer in IE 8), wodurch die Eigenschaft undefined
des globalen Objekts als schreibgeschützt definiert wird (Es ist also nur möglich, die Variable in Ihrem eigenen lokalen Bereich zu spiegeln.) Diese Informationen sind jedoch aus Gründen der Abwärtskompatibilität weiterhin nützlich.
alert(window.hasOwnProperty('undefined')); // alerts "true"
alert(window.undefined); // alerts "undefined"
alert(undefined === window.undefined); // alerts "true"
var undefined = "new value";
alert(undefined); // alerts "new value"
alert(undefined === window.undefined); // alerts "false"
void
kann dagegen nicht überschrieben werden. void 0
gibt immer undefined
zurück. undefined
kann andererseits sein, was auch immer Herr Javascript entscheidet, dass er es wünscht.
void 0
?Warum sollten wir void 0
verwenden? Was ist das Besondere an 0
? Könnten wir nicht genauso einfach 1
oder 42
oder 1000000
oder "Hello, world!"
verwenden?
Und die Antwort lautet: Ja, wir könnten und es würde genauso gut funktionieren. Der einzige Vorteil der Weitergabe von 0
anstelle eines anderen Arguments ist, dass 0
kurz und idiomatisch ist.
Obwohl undefined
in modernen JavaScript-Umgebungen im Allgemeinen als vertrauenswürdig gilt, gibt es einen kleinen Vorteil von void 0
: Es ist kürzer. Der Unterschied ist nicht genug, um sich beim Schreiben von Code Sorgen zu machen, aber er kann sich über große Codebasen so weit summieren, dass die meisten Codeminimierer undefined
durch void 0
ersetzen, um die Anzahl der an den Browser gesendeten Bytes zu verringern.
void 0
gibt undefiniert zurück und kann nicht überschrieben werden, während undefined
überschrieben werden kann.
var undefined = "HAHA";
void
ist ein reserviertes JavaScript-Schlüsselwort. Es wertet den Ausdruck aus und gibt immer undefined
zurück.