在 javascript 解构赋值中设置嵌套默认值,只需在目标属性对应的模式位置直接指定默认值即可。当对象结构中存在该层级且值为 `undefined` 时,将使用默认值;若该层级存在但值为 `null`,则不会触发默认值替换。例如 { a: { b: 'default' } } 表示如果 a.b 为 undefined,则取 'default'。

如何为深层嵌套的对象属性设置默认值
对于多层嵌套的对象,可以在解构模式中逐层展开并指定默认值。只要路径上的任意一级是 undefined,后续层的默认值逻辑就会生效。如果中间层级缺失,解构会尝试创建该层级以应用默认值,或者直接使用提供的默认对象结构。

const config = {
user: {
name: 'Alice'
}
};
// 假设 config 中没有 address 字段
const {
user: {
name,
address: { city = 'Unknown', zip = '00000' } = {}
} = {}
} = config;
console.log(name); // 'Alice'
console.log(city); // 'Unknown'
console.log(zip); // '00000'
在这个例子中,address 在 config.user 中不存在(即 undefined)。因此,address: { ... } = {} 中的 = {} 生效,提供了一个空的默认对象。接着,在这个空对象中查找 city 和 zip,它们也是 undefined,所以分别触发了 'Unknown' 和 '00000' 的默认值。
嵌套数组解构中的默认值处理
在嵌套数组的解构中,同样可以为内部元素设置默认值。如果数组长度不足,导致索引位置的值为 undefined,则使用指定的默认值。这与对象解构的逻辑一致,都是基于 undefined 检测。

const data = [1, [2, 3]]; // 提取第一层第一个元素,以及第二层数组的第一个和第二个元素 const [ first, [ second, third = 'default_third' ] = ['default_second'] ] = data; console.log(first); // 1 console.log(second); // 2 console.log(third); // 3 // 如果 data 是 [1] const dataShort = [1]; const [ f, [ s, t = 't_def' ] = ['s_def'] ] = dataShort; console.log(f); // 1 console.log(s); // 's_def' console.log(t); // 't_def'
当输入数组较短时,如 [1],第二层解构的目标是 data[1],它是 undefined。此时 = ['default_second'] 生效,提供默认数组。然后从该默认数组中提取 s 和 t。由于默认数组只有 's_def',t 为 undefined,故触发 't_def'。
当嵌套属性显式为 null 时默认值是否生效
在 JavaScript 解构赋值中,默认值仅在对应属性的值为 undefined 时才会被使用。如果属性存在但显式赋值为 null,默认值不会生效,最终结果为 null。这是开发者常遇到的陷阱,需特别注意区分“缺失”与“空值”。
const obj = {
nested: {
value: null
}
};
const {
nested: {
value = 'default'
} = {}
} = obj;
console.log(value); // null, not 'default'
在上述代码中,obj.nested.value 明确为 null。虽然设置了 value = 'default',但因为 null !== undefined,所以默认值未被触发。若要使默认值生效,必须确保该路径上的值为 undefined,或者在解构前对数据进行预处理,将 null 转换为 undefined。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











