考虑以下代码:

function foo({
    item1 = 'a',
    item2 = 'b',
    item3 = {x: 1, y: 2}
} = {}) {
    console.log(item1,item2,item3.x,item3.y)
}


如果调用foo(),将获得一个对象,其中包含item1,item2和item3的默认值。您还可以调用foo({item1: 'm', item2: 'n'}),结果将包括默认的item3 {x: 1, y: 2}。但是,如果您致电:

foo({item1: 'm', item2: 'n', item3: {x: 99}})


您将在函数undefined的范围内获得item3.yfoo

所以:

在这种情况下,是否有办法为item3的嵌套属性获取单独的默认值?

最佳答案

这是不可能的。

在参数中,您尝试提取3个变量:item1对象,item2对象和item3对象。

最重要的是,如果item3对象不包含某些属性,您还可以尝试对其进行突变。

但是,所有破坏性工作都可以将对象的属性提取为变量-它不能使任何现有对象发生突变(没有一些不该使用的非常丑陋的古怪代码)。

如果您可以将item3的各个属性提取到新变量中,则很有可能,但是:



function foo({
  item1 = 'a',
  item2 = 'b',
  item3: {
    x = 1,
    y = 2
  } = {}
} = {}) {
  console.log(item1, item2, x, y)
}


foo({item1: 'm', item2: 'n'})
foo({item1: 'm', item2: 'n', item3: {x: 99}})

09-25 15:15