考虑以下代码:
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.y
的foo
。所以:
在这种情况下,是否有办法为
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}})