2016-04-13 2 views
-1

req.userが存在するかどうかを確認せずにreq.user.premiumが真であるかどうかを確認する方法はありますか、これを1行に簡略化する方法がありますか?オブジェクトが存在し、子が1行に存在するかどうかをチェックする方法はありますか?

私はちょうどreq.user.premiumをチェックしようとしましたが、req.userが空の場合req.userundefinedあるので、それは同じことがreq.user && req.user.premiumのために行く、エラーがスローされます。それは

を取得と同じくらい簡単です

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

req.user.premium' 'の値は何ですか?詳細コードを追加してください。 –

+0

他に何が追加できるか分かりません。最初の行に「req.user.premiumがtrueであるかどうかを確認する方法はありますか?」と記載されています。 –

+2

あなたは間違っているようです。 'if(req.user && req.user.premium)' req.userが定義されていない場合は投げません。 JS(と私が知っている他のすべての言語)では 'if(x && anything)'を与え、 'x'がfalseを評価すると他の条件は評価されないので、そうでない場合でもスローできません。 3/0 === 5) '<==は – drewmoore

答えて

2

つのラインを、(あなたはまだ空のvalをCONSOLE.LOG仮定):

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

OR 2行(1文):

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

EDIT:

あなたのreqオブジェクトが定義されていないと仮定すると...次の操作を行います。

つのラインを、(あなたはまだ空のvalにconsole.logと仮定した場合):

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

または2行(1文):

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

最初の条件(REQ)が定義されていない場合、第二及び第三の条件が評価されません - AKA:Short-Circutiing

+0

あなたが質問を読んだ場合、 'req.user'が設定されていなければ、' req.user.ANYTHING'は 'undefined'になるので、問題を引き起こします。 –

+3

これは短絡を使用しているため、第2の条件でreq.userが未定義になることはありません – EaziLuizi

+0

これは 'undefined'を返します。 –

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

は、あなたも行うことができます。

var premium = false; 

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

} 
+0

あなたが質問を読むと、私は問題が発生すると述べました。なぜなら 'req.user'が設定されていなければ、' req.user.ANYTHING'は 'undefined'になるからです。 –

+0

はい、そうですよね。 –

+0

私は周りの道を見つけようとしています。だから私はこの質問をしました。 try catch文で行の後に行を折り返さなければならないことも望んでいません。私はこれに代わるものです。 –

関連する問題