前言:在面试中,面试官经常会问你有没有了解过ES6+的新特性?你有用过哪些ES6+的好用的特性?这背后其实是面试官希望了解你是否关注技术前沿,是否能够将新特性运用到实际开发过程中。下面我简单介绍下一些核心特性,以便各位在面试中心里有个大概的回答思路。
1. 变量声明
-
let
和const
:let
:块级作用域,避免变量提升导致的意外覆盖。const
:声明常量,值不可修改(对象 / 数组内容可变)。- 应用场景:循环变量、配置项等。
2. 函数增强
-
箭头函数(
() => {}
) :- 语法更简洁,无
this
绑定(继承外层作用域的this
)。 - 示例 :适合回调函数,如
arr.map(item => item * 2)
。
- 语法更简洁,无
-
默认参数:
function greet(name = 'Guest') { ... }
,简化参数处理。
3. 模板字符串
- 功能 :多行字符串、变量插值(
${expression}
)、表达式运算。 - 示例:
js
const name = 'Alice';
console.log(`Hello, ${name}! Age: ${20 + 5}`);
4. 解构赋值
- 对象解构:
js
const { name, age } = { name: 'Bob', age: 30 };
- 数组解构:
js
const [a, b, ...rest] = [1, 2, 3, 4]; // rest = [3,4]
- 用途:快速提取数据,减少样板代码。
大家可以看我这篇文章详细了解解构(《五分钟带你了解ES6中的解构》 - 掘金 (juejin.cn))
5. Promise与异步处理
-
Promise:
- 解决回调地狱,通过
.then()
链式调用处理异步。 - 示例:
- 解决回调地狱,通过
js
fetchData().then(result => handle(result));
- async/await :
- 以同步方式编写异步代码,提高可读性
- 示例:
js
async function loadData() {
const response = await fetch(url);
return response.json();
}
6. 模块化(ES Module)
- 导入/导出:
js
// 导出
export const add = (a, b) => a + b;
// 导入
import { add } from './math.js';
- 优势:标准化模块管理,支持Tree-Shaking优化。
7. 新数据结构
- Set:无序、唯一值集合,支持快速查找。
js
const unique = new Set([1, 2, 2, 3]); // size: 3
- Map:键值对存储,键可以是任意类型
js
const map = new Map(); map.set('key', 'value');
- 对象与数组增强
- 对象字面量扩展:
js
const name = 'Alice';
const obj = { name, sayHello() { ... } }; // 简写属性和方法
- includes方法:
js
[1, 2, 3].includes(2); // true
- 扩展运算符(...):
js
const arr = [1, 2];
const newArr = [...arr, 3]; // [1,2,3]
9. Proxy与Reflect
- Proxy:拦截对象的访问,修改等操作
js
const handler = { get(target, key) { ... } };
const proxy = new Proxy(target, handler);
- Reflect:与Proxy配合,提供更安全的对象操作方式
10. 其他实用特性
- Symbol:唯一标识符,避免属性名冲突
- Class语法糖:基于原型链的面向对象编程
- for...of循环:遍历可迭代对象(数组、Set等)。