2016-04-13 17 views
-1

req.user.premium'un req.user olup olmadığını kontrol etmek zorunda kalmadan kontrol etmenin bir yolu var mı, yoksa bunu tek bir satır halinde basitleştirmenin bir yolu var mı?Bir nesnenin var olup olmadığını ve tek bir satırda bir çocuğu olup olmadığını kontrol etmenin bir yolu var mı?

Sadece req.user.premium kontrol denedim ama req.user boşsa req.userundefined çünkü o zaman aynı req.user && req.user.premium için de geçerli, hata verir. o

alır gibi yaklaşık olarak basit

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

'req.user.premium' değeri nedir? lütfen detay kodunu ekleyin. –

+0

Başka neler ekleyebileceğimi bilmiyorum. İlk satırda "req.user.premium'ın doğru olup olmadığını kontrol etmenin bir yolu var" diye belirtiyor. –

+2

Yanılıyorsunuz. Eğer req.user undefined ise (req.user && req.user.premium) 'a basılmaz. JS'de (ve bildiğim her dilde), eğer (x && bir şey) 'i verilirse, eğer x 'yanlış olarak değerlendirilirse, diğer koşullar değerlendirilmez, bu yüzden aksi takdirde onlar bile alamazlar. 3/0 === 5) <== – drewmoore

cevap

2

One hattı, (hala boş val console.log varsayarak):

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

VEYA 2 hat (1 statement line):

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

DÜZENLEME:

senin req nesne tanımsız varsayarsak ... Bunu yapmak:

One hattı, (hala boş val console.log varsayarak):

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

VEYA 2 satır (1 ifade satırı):

if(req && req.user && req.user.premium) 
    console.log("is premium"); 
birinci durum (Tlp) tanımlanmamış ise

, ikinci ve üçüncü durumlar değerlendirilmeyecektir - AKA: Short-Circutiing)

+0

Sorduğumu gördüğünüz soruyu okursanız Bu bir soruna neden olur, çünkü 'req.user' ayarlanmamışsa,' req.user.ANYTHING 'undefined' olur. –

+3

Bu kısa devre kullanır, dolayısıyla ikinci koşulda req.user undefined ile karşılaşmayacaksınız – EaziLuizi

+0

Bu, 'undefined' i döndürür. –

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

da yapabilirsiniz:

var premium = false; 

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

} 
+0

Eğer bir soruna neden olduğunu belirttiğiniz soruyu okursanız, çünkü 'req.user' ayarlanmadıysa,' req.user.ANYTHING 'undefined' olacaktır. –

+0

evet bu doğru, bu beklenen –

+0

Bu şekilde bir yol bulmaya çalışıyorum. Bu yüzden bu soruyu sordum. Ayrıca satırları hatlarını yakalama ifadeleriyle sarmak istemiyorum. Buna alternatifim var. –

İlgili konular