ES6+ 核心语法精讲:让 JavaScript 更优雅、更强大
2015 年是 JavaScript 发展的重要分水岭。ES6(即 ECMAScript 2015)的发布,标志着 JS 正式迈入现代编程语言行列,为大型项目开发提供了坚实基础。本文将系统梳理 ES6+ 中提升代码优雅性与可读性的关键特性。
一、变量声明与解构赋值
1. 一次性声明多个变量
传统写法冗长且易出错:
ini
let a = 1;
let b = 2;
let c = 3;
ES6 解构赋值提供更简洁的方式:
css
let [a, b, c] = [1, 2, 3];
console.log(a, b, c); // 1 2 3
2. 嵌套数组解构
支持对多维数组进行精准提取:
ini
const arr = [1, [2, 3, [4], 6]];
const [a, [b, c, [d], e]] = arr;
console.log(a, b, c, d, e); // 1 2 3 4 6
3. Rest 运算符(...)
用于捕获剩余元素,常用于函数参数或数组拆分:
arduino
const arr = [1, 2, 3, 4, 5];
const [first, ...rest] = arr;
console.log(first); // 1
console.log(rest); // [2, 3, 4, 5]
// 字符串也可解构
const [a, b, ...c] = 'hello';
console.log(a, b, c); // 'h' 'e' ['l', 'l', 'o']
实战示例:团队成员分配
bash
const users = ['Darvin Ham', 'James', 'Luka', 'Davis', 'Ayton', 'inx'];
const [captain, ...players] = users;
console.log(captain); // 'Darvin Ham'
console.log(players); // ['James', 'Luka', 'Davis', 'Ayton', 'inx']
二、对象解构与属性简写
1. 对象解构赋值
直接从对象中提取属性,无需重复书写 obj.xxx:
javascript
const obj = {
name: 'inx177',
age: 18,
sex: 'boy',
like: { n: '唱跳' }
};
// 解构 + 嵌套解构
let { name, age, like: { n } } = obj;
console.log(name, age, n); // 'inx177' 18 '唱跳'
✅ 关键原则 :左右结构一致,
{}对应对象,[]对应数组。
2. 对象属性简写(Shorthand Property)
当变量名与属性名相同时,可省略重复书写:
ini
const sex = 'boy';
const obj = {
name: 'inx177',
age: 18,
sex // 等价于 sex: sex
};
三、模板字符串(Template Literals)
告别繁琐的字符串拼接,使用反引号 ````` 和 ${} 插值:
javascript
let myName = 'liZhi';
// 传统方式
console.log('Hello, my name is ' + myName);
// ES6 模板字符串
console.log(`Hello, my name is ${myName}`);
console.log(`Hello, my name is ${myName.toUpperCase()}`); // 支持表达式求值
💡
${}中可放入任意合法 JavaScript 表达式,包括函数调用、运算等。
四、for...of 循环
语义清晰,专为可迭代对象(如字符串、数组)设计:
csharp
let myName = 'liZhi';
for (let char of myName) {
console.log(char);
}
// 输出:l i Z h i
相比 for (let i = 0; i < str.length; i++),for...of 更简洁、可读性更强。
五、BigInt:安全处理大整数
JavaScript 的 Number 类型存在精度限制(最大安全整数为 2^53 - 1)。
BigInt 提供任意精度整数支持:
javascript
let bigNum = 1234567890987654321n; // 注意末尾的 n
console.log(bigNum, typeof bigNum); // 1234567890987654321n "bigint"
⚠️ BigInt 不能与 Number 直接运算,需类型一致。
六、指数运算符(ES7)
ES7(2016)引入 ** 作为幂运算符,替代 Math.pow:
arduino
console.log(2 ** 10); // 1024
console.log(3 ** 3); // 27
七、函数增强:默认参数与 Rest 参数
1. 默认参数
简化函数调用,避免 || 或 typeof 判断:
javascript
function foo(x = 1, y = 2) {
return x + y;
}
console.log(foo(3, 4)); // 7
console.log(foo(3)); // 5(y 使用默认值 2)
2. Rest 参数(...args)
替代 arguments,获得真正的数组:
scss
function foo(...args) {
console.log(args); // [1, 2, 3, 4] ------ 是数组!
}
foo(1, 2, 3, 4);
✅
args是标准数组,可直接使用map、filter等方法;而arguments是类数组对象。
总结:ES6+ 如何改变 JavaScript?
| 特性 | 优势 |
|---|---|
| 解构赋值 | 减少样板代码,提升数据提取效率 |
| 模板字符串 | 字符串拼接更直观,支持表达式 |
| for...of | 循环语义清晰,适用于所有可迭代对象 |
| BigInt | 安全处理超大整数 |
| 默认参数 & Rest 参数 | 函数更灵活、健壮 |
| 属性简写 | 对象字面量更简洁 |
ES6 不仅是语法糖,更是工程化思维的体现。它让 JavaScript 从"脚本语言"蜕变为适合企业级开发的现代语言。
推荐阅读: