对象解构可一行交换已声明变量的值,写法为{ a, b } = { a: b, b: a };需确保变量已声明且非const,相比数组解构更显式但适用性较窄。

JS 中可以用对象解构配合临时对象,一行代码交换两个变量的值,但要注意它和数组解构交换的写法不同,也不同于传统临时变量方式。
用对象解构交换的基本写法
核心思路是:把两个变量作为属性名,构造一个临时对象,再用对象解构重新赋值。
- 语法形式:{ a, b } = { a: b, b: a };
- 必须确保左侧是已声明的变量(不能是
let {a, b} = ...这种新声明) - 右侧对象的属性名要和左侧解构的键名一致,值则互换
实际使用示例
假设已有两个变量:
let a = 10; let b = 20;
执行交换:
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
{ a, b } = { a: b, b: a };
之后 a 变为 20,b 变为 10。
注意事项
- 不能用于
const声明的变量(因为解构赋值会重新赋值,而const不允许) - 不适用于未声明的变量(如直接写
{ x, y } = { x: y, y: x }会报ReferenceError) - 相比数组解构
[a, b] = [b, a],对象解构更显式、可读性略高,但性能无差异 - 若变量名含特殊字符或想动态控制,对象解构更容易扩展(比如加条件逻辑)
对比数组解构(更常用)
多数场景推荐用数组解构,更简洁:
[a, b] = [b, a];
它不要求变量已命名匹配,也不依赖属性名,适用性更广。对象解构更适合语义明确、需强调字段含义的场合(例如交换配置项中的 from 和 to)。

















