【问题标题】:destructuring assignment default value [duplicate]解构赋值默认值
【发布时间】:2018-08-20 09:27:32
【问题描述】:

我正在学习 javascript,但在解构时尝试为变量提供默认值时,我有点卡在 ES6 语法上。 基本上,我正在尝试分配一个变量,将对象属性的值赋予它,如果该值为 false/null/undefined,我希望它是一个空对象。 例如,

let foo = { 
            prop1: 'hello!',
            prop2: null 
           }

const prop1 = foo.prop1 || {}
const prop2 = foo.prop2 || {}

console.log(prop1) //  hello!
console.log(prop2) //  {}

????这就是我想要的和????是我认为等同于上面的 ES6 糖语法(但它不起作用..)

let foo = { 
            prop1: 'hello!',
            prop2: null 
           }

const { prop1 = {} } = foo
const { prop2 = {} } = foo

console.log(prop1) // hello!
console.log(prop2) // null

但不知何故,有时它似乎在 React 中工作,但其他时候却没有.. 是兼容性问题吗?好混乱!

【问题讨论】:

    标签: javascript reactjs ecmascript-6 variable-assignment destructuring


    【解决方案1】:

    你可能对 null 和 undefined 的区别感到困惑,例如:

    const { dogName = 'snickers' } = { dogName: undefined }
    console.log(dogName) // what will it be? 'snickers'!
    
    const { dogName = 'snickers' } = { dogName: null }
    console.log(dogName) // what will it be? null!
    
    const { dogName = 'snickers' } = { dogName: false }
    console.log(dogName) // what will it be? false!
    
    const { dogName = 'snickers' } = { dogName: 0 }
    console.log(dogName) // what will it be? 0!
    

    取自:http://wesbos.com/destructuring-default-values/

    【讨论】:

      【解决方案2】:

      不,不是兼容性问题。

      如果没有值,默认值将起作用,这意味着如果它是undefined,它将起作用。在您的示例中,您将null 分配给prop2,而null 是一个已定义的值。

      因此,如果您的prop2 未定义或分配undefined,它将起作用

      let foo = { 
              prop1: 'hello!',
              prop2: undefined 
             }
      
      const { prop1 = {} } = foo
      const { prop2 = {} } = foo
      
      console.log(prop1) // hello!
      console.log(prop2) // {}
      

      【讨论】:

      • ahhhh 我终于明白了 null 和 undefined 之间的实际区别,非常感谢!
      • FWIW,undefined 也是一个值,但由于它也是您在属性不存在或未传递参数时获得的值,因此决定在 @ 时应用默认值987654329@ 是值。
      • 是的,你是对的。在我上面的回答中,我可能有一些问题需要解释。谢谢菲利克斯。
      • 如果 foo 未定义怎么办?
      • 它将返回Uncaught ReferenceError: foo is not defined
      猜你喜欢
      • 2017-07-12
      • 2016-10-30
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2016-08-22
      相关资源
      最近更新 更多