2015 年,ES6(ECMAScript 2015)横空出世,标志着 JavaScript 正式迈入现代编程语言行列。
它不仅弥补了早期 JS 在工程化、可读性、安全性上的短板,更引入了如 解构赋值、展开运算符、对象属性简写 等强大特性,极大提升了开发效率与代码美感。
一、为什么需要 ES6?
在 ES6 之前,JavaScript 被诟病为“玩具语言”:
- 没有块级作用域(
var变量提升) - 无法定义类(
class关键字缺失) - 函数参数处理笨拙
- 对象和数组操作冗长
而 ES6 的出现,让 JS 具备了企业级开发能力,成为前端乃至全栈(Node.js)、AI 工具链(如 Trae、Vite 插件)的首选语言。
✅ 核心价值:优雅 + 表达力 + 工程友好
二、解构赋值(Destructuring Assignment)
解构是一种从数组或对象中按结构提取值并赋给变量的语法。它让“一次性声明多个变量”变得极其简洁。
1. 数组解构
javascript
编辑
const users = ['Darvin Ham', 'James', 'Luka', 'Davis', 'Ayton'];
// 提取第一个为 captain,其余为 players
const [captain, ...players] = users;
console.log(captain); // 'Darvin Ham'
console.log(players); // ['James', 'Luka', 'Davis', 'Ayton']
[a, b, c] = arr:按位置匹配...rest:剩余运算符(Rest),收集剩余元素(必须放在最后)
✅ 应用场景:
- 函数返回多个值
- 快速交换变量:
[a, b] = [b, a] - 处理 API 返回的数组数据
💡 字符串也可被解构(因其可迭代):
javascript
编辑
const [a1, b2, c3, d4, e6] = 'hello';
console.log(a1, b2, c3, d4, e6); // 'h' 'e' 'l' 'l' 'o'
2. 对象解构
javascript
编辑
const obj = {
name: '刘翔平',
age: 20,
sex: 'box',
like: {
n: '唱跳'
}
};
// 解构嵌套对象,并重命名(name1 不存在,故为 undefined)
let { name1, age, like: { n } } = obj;
console.log(name1); // undefined(obj 中无 name1 属性)
console.log(age); // 20
console.log(n); // '唱跳'
⚠️ 常见误区:
-
左边变量名必须与对象属性名一致(除非使用别名):
javascript 编辑 let { name: realName } = obj; // realName = '刘翔平' -
若属性不存在,默认值为
undefined,可通过默认值避免:javascript 编辑 let { name = '匿名', score = 0 } = obj;
✅ 优势:
- 避免重复写
obj.xxx - 支持深度嵌套解构
- 提升函数参数可读性(如 React props)
三、对象属性简写(Shorthand Property)
当变量名与对象属性名相同时,ES6 允许省略冒号和值:
javascript
编辑
const sex = 'box';
const name = '刘翔平';
// 传统写法
const obj1 = { name: name, sex: sex };
// ES6 简写
const obj2 = { name, sex };
✅ 效果完全相同,但代码更简洁、意图更清晰。
💡 特别适合:
- 模块导出:
export { func, config } - 构建配置对象:
createUser({ id, name, email })
四、展开运算符(Spread Operator)...
虽然你提到的是 ... 在解构中的 Rest 用法(收集剩余项),但它还有强大的 Spread 用法(展开):
javascript
编辑
// 数组合并
const team = [captain, ...players];
// 对象合并(浅拷贝)
const profile = { ...obj, city: '南昌' };
// 函数调用展开参数
Math.max(...[1, 2, 3]); // 等价于 Math.max(1, 2, 3)
🔁 Rest vs Spread:
- Rest(收集):
[a, ...rest] = arr→ 用于解构左侧- Spread(展开):
func(...args)→ 用于表达式中
五、大厂面试高频考点
1. 以下代码输出什么?
javascript
编辑
const { a: x = 10, b: y = 20 } = { a: 30 };
console.log(x, y);
答:
30 20
解析:a存在,取值 30;b不存在,使用默认值 20。
2. 如何安全地解构可能为 null/undefined 的对象?
答:使用逻辑或提供默认空对象:
javascript 编辑 const { name } = user || {}; // 或使用可选链(ES2020) const name = user?.name;
3. ... 在函数参数中叫什么?有什么限制?
答:叫 剩余参数(Rest Parameters),必须是最后一个参数:
js 编辑 function sum(first, ...others) { } // ✅ function sum(...others, last) { } // ❌ 语法错误
六、总结:ES6 让代码“少即是多”
| 特性 | 传统写法 | ES6 写法 | 优势 |
|---|---|---|---|
| 多变量赋值 | let a = arr[0], b = arr[1] | let [a, b] = arr | 简洁、防错 |
| 对象属性 | { name: name } | { name } | 减少重复 |
| 剩余元素 | 手动 slice | ...rest | 表达力强 |
| 默认值 | `name = name | '匿名'` |
🌟 掌握 ES6 解构与简写,不仅是语法升级,更是思维方式的进化:
从“操作数据”转向“描述结构” ,让代码更接近自然语言,也更契合 AI 编程时代对“清晰上下文”的要求。
📚 建议实践:
下次写 React 组件时,试试用解构获取 props;
处理 API 响应时,用对象解构直接提取所需字段——你会发现,代码真的可以“少写一半”。