webentwicklung-frage-antwort-db.com.de

Was bedeutet "void 0"?

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?

473
Randomblue

Was bedeutet 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

Was ist der Sinn davon?

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.

Warum speziell 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.

Warum ist das immer noch relevant?

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.

946
Peter Olson

void 0 gibt undefiniert zurück und kann nicht überschrieben werden, während undefined überschrieben werden kann.

var undefined = "HAHA";
102
epascarello

void ist ein reserviertes JavaScript-Schlüsselwort. Es wertet den Ausdruck aus und gibt immer undefined zurück.

28
Digital Plane