2016-04-13 8 views
-1

Gibt es eine Möglichkeit zu überprüfen, ob req.user.premium wahr ist, ohne zu überprüfen, ob req.user existiert oder gibt es eine Möglichkeit, dies in einer einzigen Zeile zu vereinfachen?Gibt es eine Möglichkeit zu überprüfen, ob ein Objekt existiert und ein Kind in einer einzelnen Zeile hat?

Ich habe versucht, req.user.premium just checking aber wenn req.user leer ist, dann wirft es einen Fehler, da req.userundefined ist, das gleiche für req.user && req.user.premium geht.

if(req.user){ 
    if(req.user.premium){ 
     console.log('Is premium'); 
    } 
} 
+0

Was ist der Wert von 'req.user.premium'? Bitte fügen Sie den Detailcode hinzu. –

+0

Ich bin nicht sicher, was ich noch hinzufügen könnte. In der ersten Zeile steht "Gibt es eine Möglichkeit zu überprüfen, ob req.user.premium wahr ist". –

+2

Sie scheinen sich zu irren. 'if (req.user && req.user.premium)' Wird NICHT geworfen, wenn req.user nicht definiert ist. In JS (und jeder anderen Sprache, die ich kenne), gegeben 'if (x && irgendetwas)', wenn 'x' false auswertet, werden die anderen Bedingungen nicht ausgewertet, so dass sie nicht werfen können, selbst wenn sie es sonst tun würden.if (false && 3/0 === 5) '<== wird – drewmoore

Antwort

2

Eine Zeile, (vorausgesetzt, Sie immer noch ein leeres val console.log):

console.log((req.user && req.user.premium) ? 'Is premium' : ''); 

ODER 2 Zeilen (1 Anweisungszeile):

if(req.user && req.user.premium) 
    console.log("is premium"); 

EDIT:

Angenommen, Ihr req Objekt nicht definiert ist ... dies tun:

Eine Zeile, (vorausgesetzt, Sie immer noch ein leeres val console.log):

console.log((req && req.user && req.user.premium) ? 'Is premium' : ''); 

OR 2 Zeilen (1 Anweisungszeile):

if(req && req.user && req.user.premium) 
    console.log("is premium"); 

Wenn die erste Bedingung (erf) nicht definiert ist, wird die zweite und die dritte Bedingung nicht ausgewertet werden - AKA: Short-Circutiing)

+0

Wenn Sie die Frage lesen, die Sie sehen würden, die ich angegeben habe das verursacht ein Problem, wenn 'req.user' nicht gesetzt ist, dann wäre' req.user.ANYTHING' 'undefined'. –

+3

Dies verwendet einen Kurzschluss, so dass Sie nicht sehen, dass req.user unter der zweiten Bedingung nicht definiert ist. – EaziLuizi

+0

Dies gibt "undefined" zurück. –

1
if(req.user && req.user.premium){ 
    console.log('Is premium'); 
} 

, die ungefähr so ​​einfach ist, wie es

bekommt können Sie auch tun:

var premium = false; 

try{ 
    premium = req.user.premium; 
} 
catch(err){ 

} 
+0

Wenn Sie die Frage lesen, werden Sie feststellen, dass dies ein Problem verursacht, weil "req.user.ANYTHING" nicht definiert ist, wenn "req.user" nicht gesetzt ist. –

+0

Ja, das ist richtig, das wird erwartet –

+0

Das ist, was ich versuche, einen Weg zu finden .. Deshalb habe ich diese Frage gestellt. Ich möchte auch keine Zeilen nach Zeilen in try catch-Anweisungen umbrechen müssen. Ich bin auf der Suche nach einer Alternative dazu. –

Verwandte Themen