601 Stimmen

Was bedeutet "ungültig 0"?

Beim Durchlesen des Backbone.js-Quellcodes habe ich dies gesehen:

validObj[attr] = void 0;

¿Qué es? void 0 ? Was ist der Zweck der Verwendung hier?

1188voto

Peter Olson Punkte 130102

Was bedeutet void 0 bedeuten?

void [MDN] ist ein Präfix-Schlüsselwort, das ein Argument annimmt und immer zurückgibt undefined .

Beispiele

void 0
void (0)
void "hello"
void (new Date())
//all will return undefined

Wozu soll das gut sein?

Das scheint ziemlich nutzlos zu sein, nicht wahr? Wenn es immer zurückkommt undefined Was ist falsch daran, einfach die undefined selbst?

In einer perfekten Welt könnten wir sicher einfach die undefined : Es ist viel einfacher und leichter zu verstehen als void 0 . Aber falls Sie es noch nicht bemerkt haben, Dies ist keine perfekte Welt besonders wenn es um Javascript geht.

Das Problem bei der Verwendung von undefined war, dass undefined ist kein reserviertes Wort ( es ist eigentlich eine Eigenschaft des globalen Objekts [wtfjs] ). Das heißt, undefined ist ein zulässiger Variablenname, so dass Sie ihm nach Belieben einen neuen Wert zuweisen können.

alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"

Hinweis: Dies ist kein Problem mehr in jeder Umgebung, die ECMAScript 5 oder neuer unterstützt (d.h. in der Praxis überall außer IE 8), der die undefined Eigenschaft des globalen Objekts als schreibgeschützt (so dass es nur möglich ist, die Variable in Ihrem eigenen lokalen Bereich zu schattieren). Diese Information ist jedoch für die 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 hingegen nicht übergangen werden. void 0 sera immer return undefined . undefined Andererseits kann Mr. Javascript alles sein, was er will.

Warum void 0 konkret?

Warum sollten wir die void 0 ? Was ist so besonders an 0 ? Könnten wir nicht genauso gut die 1 ou 42 ou 1000000 o "Hello, world!" ?

Und die Antwort lautet: Ja, das könnten wir, und es würde genauso gut funktionieren. Der einzige Vorteil der Übergabe in 0 anstelle eines anderen Arguments ist, dass 0 ist kurz und idiomatisch.

Warum ist das immer noch relevant?

Obwohl undefined in modernen JavaScript-Umgebungen im Allgemeinen vertraut werden kann, gibt es einen trivialen Vorteil von void 0 : Sie ist kürzer. Der Unterschied ist nicht so groß, dass man sich beim Schreiben von Code Sorgen machen müsste, aber er kann sich bei großen Codebasen so sehr summieren, dass die meisten Code-Minifier die undefined con void 0 um die Anzahl der an den Browser gesendeten Bytes zu reduzieren.

129voto

epascarello Punkte 194350

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

var undefined = "HAHA";

43voto

Digital Plane Punkte 36384

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X