【问题标题】:ES6 shorthand object key checkingES6 速记对象键检查
【发布时间】:2015-05-22 11:05:54
【问题描述】:

很想知道 ES6 中是否有任何部分使此类检查更加简洁:

componentWillReceiveProps(nextProps) {
    if(nextProps && nextProps.filterObj && nextProps.filterObj.area){
        // go ahead
    }
}

【问题讨论】:

  • 您要阅读还是修改?为了阅读,你可以解构它。
  • 简短回答是否定的。我不明白解构会有什么帮助。 var { filterObj: { area } } = nextProps; 将返回与 nextProps.filterObj.area 相同的错误。

标签: javascript ecmascript-6 babeljs


【解决方案1】:

不,没有存在运算符进入 ES6;不过是still discussed

你可以使用任何existing methods,当然,喜欢

if ( ((nextProps||{}).filterObj||{}).area ) {
    // go ahead
}

你也可以尝试解构和默认值:

function componentWillReceiveProps({filterObj: {area} = {}} = {}) {
    if (area) {
        // go ahead
    }
}

【讨论】:

  • 这种方法的问题是它会吞下零、空字符串和数组。正确的方法是与undefined 进行比较,但这会使代码过于庞大。
  • @lolmaus-AndreyMikhaylov:我不明白为什么它会吞下零和空字符串,当您想访问该值的另一​​个属性时,您肯定不会期望这些?如果您的意思是.area,您当然可以附加!== undefined 比较。不,它肯定不会吞下数组。
  • 例如,您希望3 成为默认值,但0 也是合法值。如果你这样做value||3,将不可能传递一个零。
  • @lolmaus-AndreyMikhaylov:您在此处使用的唯一默认值是 {} - 在访问属性时,我们仅将对象视为合法值。
猜你喜欢
  • 2021-04-05
  • 2023-03-11
  • 2020-04-27
  • 2016-12-01
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
相关资源
最近更新 更多