【问题标题】:How to implement the logical assignment in destructuring assignment in javascript?如何在javascript中实现解构赋值中的逻辑赋值?
【发布时间】:2021-12-28 08:53:42
【问题描述】:

解构赋值不适用于一个对象中的字段持有一个假值,如下:

let { aaa = 123 } = { aaa: null }
console.log(aaa) // null

那么,如何在对象解构赋值中实现||= 以实现该字段的破坏默认值?像这样:

let { aaa ||= 123 } = { aaa: null }
console.log(aaa) // 123

// it equals to
// let aaa = ({ aaa: null }).aaa || 123

【问题讨论】:

  • 你不能那样做。
  • “解构赋值不适用于一个对象中的字段持有虚假值” - null 仍然是一个值,因此它按预期工作。您的要求不适用于解构。
  • let { aaa } = { aaa: null || 123 }。否则,您必须使用您的评论版本。 Default values 仅适用于 undefined

标签: javascript ecmascript-6


【解决方案1】:

你可以通过这种方式添加一个默认值

let obj = null        
{ obj1 } = { obj1: obj || 123 }

尝试使用构造函数为对象赋值。这样解构就可以正常工作:

class Obj1 {
  a: string
  b: number
  constructor(obj) {
    this.a = obj && obj.a || 'default a'
    this.b = obj && obj.b || 1 
  }
}

let obj = null
let obj1 = new Obj1(obj)

let {aaa} = {aaa: obj1}

【讨论】:

    【解决方案2】:

    所以你不能做你想做的事。

    解构分配按预期/指定工作。只是默认值只有在解构值为undefined时才有效。

    您必须对“虚假”值使用正常语法(注意:这包括undefined, false, 0, NaN 等。在https://developer.mozilla.org/en-US/docs/Glossary/Falsy 上的广泛列表)。

    let { aaa } = { aaa: null }
    aaa ||= 123;
    

    引用 MDN Destructuring assignment

    对象

    默认值
    如果从对象中解压缩的值为undefined,则可以为变量分配默认值。

    对于数组

    默认值
    如果从数组中解压缩的值为undefined,则可以为变量分配默认值。

    【讨论】:

    • 这是对所提问题的非回答。
    猜你喜欢
    • 2010-12-22
    • 2023-03-29
    • 2011-05-25
    • 1970-01-01
    • 2021-02-11
    • 2018-04-19
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多