代码之家  ›  专栏  ›  技术社区  ›  stevenpcurtis

对象在三元运算符期间可能未定义

  •  0
  • stevenpcurtis  · 技术社区  · 8 年前

    我想把我的用户名从我的州

    我的对象可能是未定义的,我想说明这个错误,所以我使用三元运算符。但是我仍然得到相同的错误(this.store.getState().account可能未定义)。为什么?

    var myUser = this.store.getState().account.me.id ? this.store.getState().account.me.id : 0
    

    上下文(但实际上也只是认知噪声)-我在componentdidmount中使用它来获取从redux状态填充的用户id。me是一个可选状态,但account不是(它们存储在redux中)

    2 回复  |  直到 7 年前
        1
  •  2
  •   CertainPerformance    8 年前

    如果试图访问未定义的某个属性,将引发错误;如果 .account 属性未定义,则 this.store.getState().account.me.id ? 会扔的。(三元组不会决定 0 ,脚本将完全失败)

    还有,你打电话来 getState() 两次,当你只需要打一次电话。试试这样的方法:

    const account = this.store.getState().account;
    const myUser = account ? account.me.id : 0;
    
        2
  •  1
  •   Karthikeyan    8 年前

    上面的答案会起作用,但是如果account.me返回undefined,您可能会再次得到相同的错误。在这些访问嵌套属性的情况下,我更喜欢try,catch as it can catch在任何级别都不能访问undefined的属性

    var myUser;
    try {
       myUser = this.store.getState().account.me.id;
    } catch(err) {
       myUser = 0;
    }
    console.log(myUser);