JavaScript的构造函数中的= =}表达式是什么意思?

问题描述

有人可以告诉我下面代码中的= {}表达式是做什么的吗?

class Dragon {

    constructor({ birthdate,nickname,traits } = {}) {
        this.birthdate = birthdate || DEFAULT_PROPERTIES.birthdate;
        this.nickname = nickname || DEFAULT_PROPERTIES.nickname;
        this.traits = traits || DEFAULT_PROPERTIES.randomTraits;


    }
}

解决方法

Default value for the paremeter。构造函数将一个对象作为其唯一参数,如果您调用不带任何参数的函数,则会将一个空对象(即{})作为参数

请注意,该函数仅接受一个参数,尽管由于object destructuring syntax

可能看起来像3。 ,

看下面的代码:

function sayHello(name){
  const nameToPrint = name || "Unknown"
  console.log('Hello' + nameToPrint)
}

sayHello('Tylor')
// Hello Tylor

sayHello()
//Hello Unknown

此功能是完全有效的功能。如果未提供参数nameToPrint,则name的值可以是传入的名称,也可以是Unknown。

现在让我们对此进行一些更改:

 function sayHello({name}){
      const nameToPrint = name || "Unknown"
      console.log('Hello' + nameToPrint)
  }

    sayHello('Tylor')
    // Hello Tylor

    sayHello()
    //Cannot destructure property 'name' of 'undefined' as it is undefined.

现在,如果未提供参数name,则该函数将引发错误。这是由于以下事实:它将尝试从未提供的对象(也就是未定义的对象)中析构函数,最终将导致错误。通过添加={},我们为对象添加了默认值。因此,现在,如果不提供参数,则它们将是不确定的(伪造的值);并且,这些参数的值将为后备参数(||之后的值)。

回到我们的示例:

function sayHello({name} = {}){

  const nameToPrint = name || "Unknown"
  console.log('Hello' + nameToPrint)
}

sayHello('Tylor')
// Hello Tylor

sayHello()
//It will try to extract the property name from object {}
// The value of name will be undefined,so the value of nameToPrint will be "Unknown"
//Hello Unknown

最后,尝试访问未定义的属性将触发错误,但是尝试访问空对象的属性只会导致该值未定义。 See this for more info