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

Simplify boolean expression containing potentially undefined variables

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

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

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

既然听起来你已经在使用 lodash,那么使用 lodash's _.get() function 怎么样?

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

a proposal for an optional chaining property in JavaScript,但它还没有变成语言。 When/if 是的,你可以这样做:

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