11 Stimmen

Erhalte 'undefined', wenn 'window.undefined' überschrieben wird

Es scheint, dass window.undefined beschreibbar ist, d.h. es kann auf etwas anderes als seinen Standardwert gesetzt werden (der, wenig überraschend, undefined ist).

Der Punkt ist jedoch, dass immer wenn ich auf undefined verweise, es sich auf window.undefined bezieht (da window in solchen Fällen entfernt werden kann).

Also wie komme ich tatsächlich an eine undefined "Instanz", sozusagen? Wie könnte ich eine andere Variable auf undefined setzen, wenn window.undefined geändert wurde?

Wenn ich folgenden Code schreibe:

window.undefined = 'foo'; // Dieser Code könnte von jemandem/etwas ausgeführt worden sein
var blah = undefined; // blah ist nicht undefined, sondern entspricht stattdessen 'foo'...

Wie könnte ich dieses Problem lösen?

19voto

hugomg Punkte 65700

Die "Standard" -Lösung für dieses Problem besteht darin, den integrierten void-Operator zu verwenden. Sein einziger Zweck ist es, undefined zurückzugeben:

var my_undefined = void 0;

Zusätzlich dazu gibt es andere Möglichkeiten, undefined zu erhalten:

Funktionen geben undefined zurück, wenn Sie nichts return , also könnten Sie etwas wie dies tun

this_is_undefined = (function(){}());

Sie erhalten auch undefined, wenn Sie nicht genügend Argumente an eine Funktion übergeben. Eine häufige Idiom lautet daher

function foo(arg1, arg2, undefined){ //undefined ist das letzte Argument
    //Verwenden Sie `undefined` hier, ohne sich Gedanken machen zu müssen.
    //Es ist eine lokale Variable, so dass niemand es überschreiben kann
}
foo(arg1, arg2);
//da Sie das 3. Argument nicht übergeben haben,
//ist die lokale Variable `undefined` in foo auf das echte `undefined` gesetzt.

Diese Art ist besonders gut für Fälle geeignet, in denen Sie die Funktion gleichzeitig definieren und aufrufen, sodass Sie kein Risiko haben, dass Sie später vergessen und die falsche Anzahl von Argumenten übergeben.

17voto

user113716 Punkte 309387

Zusätzlich zu den anderen Lösungen können Sie den void 0-Trick anwenden, der immer undefined zurückgibt, unabhängig von der window-Eigenschaft.

window.undefined = 'foo';
var blah = void 0;

alert( blah );  // undefined

3voto

Free Consulting Punkte 4231

Eigentlich ist es überhaupt keine gute Idee, irgendetwas mit undefined zu vergleichen. Sollte stattdessen den typeof-Operator verwenden:

function isUndefined ( variant ) { return typeof variant === 'undefined' }

3voto

Yury Semikhatsky Punkte 1823

Es sollte ausreichen, einfach eine Variable zu deklarieren, ohne ihr etwas zuzuweisen:

var local_undefined;
alert(typeof local_undefined);

Aber warum zum Teufel ist es möglich, den Wert von undefined zu ändern? Kennt jemand die Geschichte dahinter?

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