Sollte ich (typeof (val) === 'undefined') oder (val === undefined) verwenden? - Javascript

Das ist ähnlich wie bei einer Reihe anderer Fragen zu SO, aber nicht genau die gleichen, die ich finden kann.

Welches ist der beste Ansatz, um in Javascript auf einen undefinierten Wert zu prüfen, und warum?

Erstes Beispiel:

var a;
if (typeof(a) === "undefined"){...}

Zweites Beispiel:

var a;
if (a === undefined){...}

Also, das erste Beispiel vergleicht den Namen vonDer Typ ist ein String, und der zweite vergleicht die Variable mit dem nicht definierten Objekt. Dabei wird der Gleichheitsoperator verwendet, der überprüft, ob die Typen die gleichen sind wie die Werte.

Welches ist besser? Oder sind sie beide so gut wie einander?

Beachten Sie, dass ich nicht nach einem Unterschied zwischen undefiniert und null oder truthy oder falsey frage, nur welche dieser beiden Methoden korrekt und / oder besser ist.

Antworten:

9 für die Antwort № 1

Wenn eine Variable nicht existiert, erhalten Sie einen Referenzfehler, wenn Sie versuchen, ihn zu verwenden - selbst wenn Sie ihn vergleichen undefined. Also immer benutzen typeof.

> foo === undefined
ReferenceError: foo is not defined
at repl:1:2
at REPLServer.eval (repl.js:80:21)
at Interface.<anonymous> (repl.js:182:12)
at Interface.emit (events.js:67:17)
at Interface._onLine (readline.js:162:10)
at Interface._line (readline.js:426:8)
at Interface._ttyWrite (readline.js:603:14)
at ReadStream.<anonymous> (readline.js:82:12)
at ReadStream.emit (events.js:88:20)
at ReadStream._emitKey (tty.js:320:10)
> typeof foo === "undefined"
true

Es ist auch möglich, dass (schlechter) Code überschrieben wird undefined, was dazu führen würde, dass ein undefinierter Wert nicht gleich ist undefined.


1 für die Antwort № 2

Das undefined kann einem Wert zugewiesen werden, und die Typprüfung funktioniert nicht. Wenn der Schutzumfang des Codes nicht geschützt ist, z.

(function(undefined){
var a;
if (a === undefined) {
})();
// note called without parameter, so undefined is actually an undefined value

diese Art zu überprüfen ist nicht sicher, und die erste wird bevorzugt

Edit: Es scheint, dass ECMA 5 die Zuweisung von Werten zu undefined auflöst, aber dies hängt immer noch von der Browser-Implementierung ab.


0 für die Antwort № 3

Die zwei Methoden sind korrekt, aber die typeof man ist immun gegenüber Veränderungen des Wertes von undefined. Wenn Sie eine strengere Überprüfung benötigen, verwenden Sie typeof().

Im Standard ECMA 3 können Sie den Wert von undefined als solchen ändern:

undefined = "not undefined";

Und dies kann im Vergleich zu Hässlichkeit führen undefined später. In ECMA 5 ist dies nicht erlaubt. Dies bedeutet, dass Sie in den meisten modernen Browsern den Wert von nicht festlegen können undefined, und Sie sollten sicher sein, mit === undefined.

Wenn Sie nicht einmal sicher sind, ob die Variable, die Sie überprüfen, definiert wurde, sollten Sie sie verwenden typeofAndernfalls erhalten Sie einen Referenzfehler.