问题描述
有人可以告诉我下面代码中的= {}表达式是做什么的吗?
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