Javascript 有没有办法检查一个对象是否存在并且在一行中有一个子对象?

Javascript 有没有办法检查一个对象是否存在并且在一行中有一个子对象?,javascript,node.js,Javascript,Node.js,有没有办法检查req.user.premium是否为真,而不必检查req.user是否存在,或者有没有办法将其简化为一行 我试着只检查req.user.premium,但是如果req.user是空的,那么它会抛出一个错误,因为req.user是未定义的,对于req.user&&req.user.premium也是如此 if(req.user){ if(req.user.premium){ console.log('Is premium'); } } 这就很简单了

有没有办法检查
req.user.premium
是否为真,而不必检查
req.user
是否存在,或者有没有办法将其简化为一行

我试着只检查
req.user.premium
,但是如果
req.user
是空的,那么它会抛出一个错误,因为
req.user
未定义的
,对于
req.user&&req.user.premium
也是如此

if(req.user){
    if(req.user.premium){
        console.log('Is premium');
    }
}
这就很简单了

您还可以执行以下操作:

var premium = false;

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

}
一行(假设您仍然使用console.log空val):

或2行(1个语句行):

编辑:

假设您的req对象未定义。。。这样做:

一行(假设您仍然使用console.log空val):

或2行(1个语句行):


如果第一个条件(req)未定义,第二个和第三个条件将不会被计算-AKA:)

req.user.premium的值是多少?请添加详细代码。我不确定还能添加什么。它在第一行指出“是否有办法检查req.user.premium是否为真”。您似乎弄错了
if(req.user&&req.user.premium)
在req.user未定义时不会抛出。在JS(以及我所知道的所有其他语言)中,给定
if(x&&anything)
,if
x
计算为false,则不会计算其他条件,因此即使它们不这样做,它们也无法抛出。
if(false&&3/0==5)
但它是?我期待着同样的事情,但我得到了一个未定义的错误。虽然这是在节点上,但它和“香草”之间不应该有任何区别js.也许
req
是什么未定义?如果你读了这个问题,你会看到我说的导致问题的原因是如果没有设置
req.user
,那么
req.user。任何
都将是
未定义的
。这就是我试图找到的解决方法。。这就是我问这个问题的原因。我也不想在try-catch语句中一行接一行地换行。我正在寻找一个替代方案。如果未设置
req.user
,则甚至不应考虑If语句的第二部分,未定义应该没有问题…如果你读了问题,你会看到我说的导致问题的原因是如果未设置
req.user
,则
req.user。任何
都将是
未定义的
。这使用短路,因此,在第二个条件下,您不会遇到req.user未定义。这将返回
undefined
。结果表明该行未定义,因为在我预期的下面有一行。由于这将2行改为1行,下面的一行显示了错误。很高兴你解决了问题,很高兴编码!
var premium = false;

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

}
console.log((req.user && req.user.premium) ? 'Is premium' : '');
if(req.user && req.user.premium)
    console.log("is premium");
console.log((req && req.user && req.user.premium) ? 'Is premium' : '');
if(req && req.user && req.user.premium)
    console.log("is premium");