简化包含潜在未定义变量的布尔表达式

时间:2019-03-04 21:45:13

标签: javascript comparison-operators

我有一个这样定义的布尔表达式:

const actif =
  this.props.configuration &&
  this.props.configuration.puissance &&
  this.props.configuration.puissance > 0

取决于组件,this.props。可能有configurationconfiguration可能有puissance。这就是为什么我需要进行所有这些验证的原因。

使用{ has } from 'lodash',我已经能够简化一点:

const actif =
      has(this.props.configuration, 'puissance') &&
      this.props.configuration.puissance > 0

但这都不令人满意。

我尝试了其他方法。我知道JS允许您执行以下操作:

(undefined || 4) === 4

是真的。不幸的是,

(this.props.configuration.puissance || undefined ) > 0 

仍然给了我Cannot read property 'puissance' of undefined

有没有一种简单的方法可以进行比较而不需要检查对象的整个树tree? (如果未定义任何步骤,停止在树中继续前进吗?)

1 个答案:

答案 0 :(得分:1)

由于听起来您已经在使用lodash,如何使用lodash's _.get() function

const actif = _.get(this.props, "configuration.puissance", 0) > 0;

a proposal for an optional chaining property in JavaScript,但尚未纳入语言。如果有的话,您可以执行以下操作:

const actif = this.props?.configuration?.puissance || 0 > 0;