2016-05-10 9 views
1

Basierend auf this answer Ich weiß, ich kann überprüfen, ob eine Eigenschaft existiert mit dem Operator in. So sehe ich in einer Menge von Code, der es üblich ist, zu verwenden, zum Beispiel:Javascript im Scheck vs Punkt Notation überprüfen

if ("gapi" in window) { 
    gapi.login(...); 
} 

Aber nicht besser wäre, es so zu tun?

if (window.gapi) { 
    gapi.login(...); 
} 

Der einzige Unterschied, den ich kenne, ist, dass die zweite falsch zurück, wenn die Variable existiert, aber sein Wert ist undefined, false, 0, null oder anderer Wert, der falsch ergibt; und der erste wird wahr zurückkommen, oder?

Also, gibt es einen anderen Unterschied? Welchen sollte ich benutzen?

+0

Mit letzterem, was wäre, wenn 'window.gapi' 0, false, null usw. wäre? – Marty

+0

@Marty ja, das ist, was ich in meinem letzten Absatz vor der Frage –

+0

angegeben hat Ihr letzter Absatz erwähnt streng "undefined" von dem, was ich verstehe. – Marty

Antwort

6

Ja, es gibt einen signifikanten Unterschied. Was ist, wenn gapi falsch ist (0, false, leere Zeichenfolge, null)? Das wird über den Block überspringen.

+0

Ja, aber das hängt davon ab, was ich will. Denn wenn es undefiniert ist. Ich möchte 'gapi.login' nicht ausführen, weil es fehlschlägt, oder? –

+0

@PabloMatiasGomez 'undefined' ist falsch –

+0

Ja! Das ist, was ich sage, im ersten Block, wenn es undefiniert ist, wird es den Block betreten und etwas ausführen, das scheitern wird, weil "login" keine Eigenschaft von undefined –

2

Verwenden Sie die erste. Mit der zweiten wird false zurückgegeben, wenn window.gapi zufällig 0, false, '', null, undefined usw. ist. Dies bedeutet, dass selbst wenn window.gapi existiert, Ihr Code das nicht glaubt.

+0

ist Ja, aber das hängt davon ab, was ich will. Denn wenn es undefiniert ist. Ich möchte 'gapi.login' nicht ausführen, weil es fehlschlägt, oder? –

Verwandte Themen