函数参数解构是最简洁高效提取对象属性的方式,支持默认值、重命名、嵌套解构、剩余属性及避免副作用,但需防null/undefined报错并注意合法标识符限制。

在函数参数中直接使用解构赋值,是最简洁高效的方式提取对象属性。
函数参数直接解构对象
把解构写在形参位置,调用时传入对象,JS 会自动提取对应属性:
- 语法:
function fn({ prop1, prop2 }) { ... } - 支持默认值:
function fn({ name = '匿名', age = 0 } = {}) { ... }(注意右侧的= {}防止传入undefined报错) - 支持重命名:
function fn({ title: name, count: num }) { console.log(name, num); }
解构嵌套对象和数组
深层结构也能一层写完:
- 嵌套解构:
function fn({ user: { id, profile: { avatar } } }) { ... } - 数组与对象混合:
function fn([{ name }, { price }]) { ... }(接收数组,解构第一个和第二个元素) - 跳过中间项:
function fn({ a, b, c: { d: value } }) { ... },只取深层的value
结合剩余属性和扩展运算符
保留未明确列出的属性,或做浅拷贝:
立即学习“Java免费学习笔记(深入)”;
- 剩余解构:
function fn({ id, name, ...rest }) { console.log(rest); }(rest是不含id和name的新对象) - 函数内再解构:
const { x, y, ...opts } = config;可放在函数体里,适合逻辑复杂或需条件判断的场景 - 避免副作用:解构生成的是新对象/值,原对象不受影响
常见陷阱与建议
几个容易出错的地方要注意:
- 传入
null或undefined会报错,务必加默认空对象:function fn({ a } = {}) { ... } - 属性名必须是合法标识符;若含特殊字符(如
'user-name'),要用引号+重命名:{ 'user-name': userName } - 解构不支持动态键名;想按变量取值,得用方括号:
const key = 'status'; const { [key]: val } = obj;


















