作者:掘金优质教学创作者
适合人群:前端初学者、想系统掌握现代 JS 特性的开发者
🌟 引言:为什么说 2015 年是 JavaScript 的分水岭?
在 2015 年之前,JavaScript 虽然因其“单线程、轻量、易上手”而广受欢迎,但也饱受诟病:
- 没有
class关键字(只能靠函数模拟面向对象) - 变量提升(hoisting)导致作用域混乱
- 缺乏模块化、解构、默认参数等现代语言特性
- 不适合大型项目协作开发
但 ES6(ECMAScript 2015)的发布彻底改变了这一切。它不仅补齐了短板,更让 JavaScript 成为一门真正适合企业级开发的语言——优雅、强大、可维护。
本文将带你系统梳理 ES6+ 的核心语法,并结合实用代码示例,助你写出更现代、更简洁的 JavaScript!
🔧 一、变量解构赋值:优雅地提取数据
1. 数组解构
// 传统写法
let a = 1, b = 2, c = 3;
// ES6 解构:左右结构一致即可
let [a, b, c] = [1, 2, 3];
console.log(a, b, c); // 1 2 3
支持嵌套数组:
const arr = [1, [2, 3, [4], 5]];
const [x, [y, z, [w], v]] = arr;
console.log(x, y, z, w, v); // 1 2 3 4 5
配合 rest 运算符(...)提取剩余元素:
const users = ['Darvin Ham', 'James', 'Luka', 'Davis', 'Ayton', '田田'];
const [captain, ...players] = users;
console.log(captain); // 'Darvin Ham'
console.log(players); // ['James', 'Luka', 'Davis', 'Ayton', '田田']
✅ 关键点:解构要求“左右结构对称”,且
...必须放在最后。
2. 对象解构
const obj = {
name: 'cxk',
age: 18,
sex: 'boy',
like: { n: '唱跳' }
};
// 解构对象:变量名需与属性名一致
let { name, age, like: { n } } = obj;
console.log(name, age, n); // 刘翔平 18 唱跳
甚至可以解构字符串的 length 属性(利用包装类):
const { length } = 'hello';
console.log(length); // 5
💡 小技巧:对象解构时,
{}表示按属性名取值;若需重命名,可用{ oldName: newName }。
🎯 二、对象属性简写:告别冗余代码
当变量名与对象属性名相同时,可直接简写:
const sex = 'boy';
const obj = {
name: 'cxk',
age: 18,
// 传统写法:sex: sex
sex, // ✅ ES6 简写
like: { n: '唱跳' }
};
✨ 这不仅减少重复,还提升可读性,是现代 JS 的标配写法。
📝 三、模板字符串:告别字符串拼接地狱
使用反引号 ` 和 ${} 插值表达式:
let myname = 'bailandi';
// 传统拼接(易错、难读)
console.log('hello, I am ' + myname);
// ES6 模板字符串
console.log(`hello, I am ${myname}`);
console.log(`hello, I am ${myname.toUpperCase()}`); // 支持任意表达式!
✅ 支持多行、表达式求值、函数调用,极大提升字符串处理体验。
🔁 四、for...of 循环:语义清晰的迭代方式
相比传统的 for(let i=0;...),for...of 更直观:
let myname = 'bailandi';
for (let char of myname) {
console.log(char);
}
// 依次输出:b, a, i, l, a, n, d, i
⚠️ 注意:
for...of适用于可迭代对象(如数组、字符串、Set、Map),不适用于普通对象。
🔢 五、BigInt:突破 Number 精度限制
JavaScript 的 Number 类型最大安全整数为 2^53 - 1,超过会丢失精度。
ES2020 引入 BigInt,用于表示任意大的整数:
let bigNum = 1234567890987654321n; // 注意末尾的 n!
console.log(typeof bigNum); // "bigint"
// 不能与普通 number 混用
// console.log(bigNum + 1); // ❌ 报错
console.log(bigNum + 1n); // ✅ 正确
✅ 现在 JS 的基本数据类型包括:
number,string,boolean,null,undefined,symbol,bigint。
⚡ 六、指数运算符(ES7/2016)
用 ** 替代 Math.pow():
console.log(2 ** 10); // 1024
console.log(3 ** 3); // 27
✨ 语法更简洁,可读性更强。
🎁 七、函数默认参数 & rest 参数
1. 默认参数
function foo(x = 1, y = 1) {
return x + y;
}
console.log(foo(3, 4)); // 7
console.log(foo(3)); // 4(y 使用默认值 1)
2. rest 参数(替代 arguments)
function foo(...args) {
console.log(args); // [1, 2, 3, 4] —— 真数组!
console.log(arguments); // 类数组对象(旧方式)
}
foo(1, 2, 3, 4);
✅
...args是真正的数组,可直接使用map、filter等方法;而arguments是类数组,需转换。
🏁 总结:ES6+ 如何赋能现代开发?
| 特性 | 优势 |
|---|---|
| 解构赋值 | 快速提取数据,代码更简洁 |
| 模板字符串 | 多行、插值、表达式一体化 |
| 对象简写 | 减少冗余,提升可读性 |
| for...of | 语义清晰,避免索引错误 |
| BigInt | 支持大数计算,突破精度限制 |
| 默认参数 & rest | 函数更灵活,参数处理更优雅 |
ES6+ 不只是语法糖,更是工程化思维的体现。
掌握这些特性,你不仅能写出更少的代码,还能构建更健壮、可维护的大型应用。
📚 延伸建议:
- 学习
Promise/async/await(异步处理) - 了解
import/export模块化方案 - 尝试使用
Map/Set替代部分对象/数组场景
✅ 动手实践:复制文中的代码到浏览器控制台,逐行运行并观察结果,加深理解!
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏,并分享给正在学习 ES6 的朋友!