es6的新特性介绍

摘要 :ECMAScript 6(简称 ES6)是 JavaScript 语言的下一代标准,于 2015 年正式发布,彻底改变了 JavaScript 的编写方式,大幅提升了代码的简洁性、可读性和可维护性。本文将系统梳理 ES6 20 大核心新特性,包含语法示例 + 使用场景,从基础到进阶全覆盖,无论是日常开发还是前端面试,这篇文章都能直接拿来用!

一、ES6 功能概述

ES6(ECMAScript 2015)是 JavaScript 历史上最重要、改动最大的版本,新增了变量声明、解构赋值、箭头函数、Promise、类、模块化等核心功能,解决了 ES5 的诸多缺陷,让 JavaScript 真正具备了开发大型企业级应用的能力。

目前所有现代浏览器均已支持 ES6,是前端工程师必须掌握的核心基础。


二、ES6 20 大核心新特性详解

1. let 关键字:块级作用域局部变量

let 用于声明块级作用域变量 ,只在当前{}内有效,解决了 var 变量提升、全局污染问题。

核心特性

  • 不允许重复声明
  • 不存在变量提升
  • 拥有块级作用域
  • 不会挂载到 window 对象

javascript

运行

复制代码
// 块级作用域示例
if (true) {
  let a = 10;
  console.log(a); // 10
}
console.log(a); // 报错:a is not defined

2. const 关键字:常量声明

const 用于声明只读常量,一旦声明必须赋值,且值不能修改(引用类型可修改内部属性)。

核心特性

  • 声明必须赋值
  • 不能重新赋值
  • 块级作用域
  • 引用类型(对象 / 数组)可修改内部数据

javascript

运行

复制代码
const PI = 3.14159;
// PI = 3.15; // 报错

const obj = { name: "ES6" };
obj.name = "ES6+"; // 允许修改内部属性

3. 变量与对象解构赋值

ES6 允许按照一定模式,从数组 / 对象中提取值,对变量进行赋值,大幅简化变量声明代码

javascript

运行

复制代码
// 数组解构
const [a, b, c] = [1, 2, 3];

// 对象解构(最常用)
const person = { name: "张三", age: 20 };
const { name, age } = person;
console.log(name); // 张三

4. 模板字符串:自带格式的字符串

使用反引号 ````` 声明字符串,支持换行、变量直接嵌入、表达式运算,告别繁琐的字符串拼接。

javascript

运行

复制代码
const name = "ES6";
const str = `我是${name}
支持多行文本
1+1=${1+1}`;

5. 简化对象与函数写法

  • 对象简写:属性名与变量名一致可省略值
  • 方法简写:去掉:function

javascript

运行

复制代码
const name = "张三";
// 简化前
const obj1 = { name: name, say: function(){} }
// 简化后
const obj2 = { name, say(){} }

6. 箭头函数:最常用的函数简化语法

() => {} 是函数的简写形式,语法更简洁,且绑定外层 this,不绑定自己的 this、arguments、super。

javascript

运行

复制代码
// 普通函数
function sum(a, b) { return a + b; }
// 箭头函数
const sum = (a, b) => a + b;

注意:不能用作构造函数、没有 arguments、this 指向外层作用域。

7. 函数参数默认值

直接给函数参数设置默认值,不传参 / 传 undefined 时使用默认值,代码更健壮。

javascript

运行

复制代码
function log(name = "游客") {
  console.log(`欢迎:${name}`);
}
log(); // 欢迎:游客

8. rest 参数:获取所有实参

...变量名 用于获取函数的所有剩余实参,替代 arguments,返回真数组。

javascript

运行

复制代码
function fn(...args) {
  console.log(args); // [1,2,3]
}
fn(1,2,3);

9. 扩展运算符:数组 / 对象展开

... 将数组 / 对象转为逗号分隔的参数序列,常用于数组拷贝、合并、解构

javascript

运行

复制代码
// 数组合并
const arr1 = [1,2];
const arr2 = [3,4];
const newArr = [...arr1, ...arr2]; // [1,2,3,4]

10. Symbol:独一无二的值

ES6 引入的原始数据类型,表示独一无二、不可修改的值,用于解决对象属性名冲突问题。

javascript

运行

复制代码
let s = Symbol("唯一标识");
let obj = { [s]: "ES6" };

11. Promise:异步编程终极解决方案

Promise 是 ES6 提供的异步处理对象,解决回调地狱问题,支持链式调用。

javascript

运行

复制代码
const p = new Promise((resolve, reject) => {
  setTimeout(() => resolve("成功"), 1000);
});
p.then(res => console.log(res));

12. Set 集合:无重复元素的集合

类似数组,成员唯一不重复,常用于数组去重。

javascript

运行

复制代码
const s = new Set([1,2,2,3]);
console.log(s); // Set(3) {1,2,3}
// 数组去重
const arr = [...new Set([1,2,2,3])];

13. Map 集合:键值对集合

类似对象,但键可以是任意类型(对象 / 函数 / 基本类型),遍历有序。

javascript

运行

复制代码
const map = new Map();
map.set("name", "ES6");
console.log(map.get("name")); // ES6

14. class 类:面向对象语法糖

ES6 使用class关键字声明类,语法更接近 Java 等面向对象语言,支持 constructor、extends 继承。

javascript

运行

复制代码
class Person {
  constructor(name) { this.name = name; }
  say() { console.log(this.name); }
}
const p = new Person("张三");

15. 数值扩展

新增Number.isFinite()Number.isNaN()Math.trunc()等方法,完善数值判断与计算。

javascript

运行

复制代码
Number.isNaN(NaN); // true
Math.trunc(3.9); // 3

16. 对象扩展

新增Object.assign()Object.keys()Object.values()等方法,简化对象操作。

javascript

运行

复制代码
// 对象合并
const obj1 = {a:1};
const obj2 = {b:2};
const obj = Object.assign({}, obj1, obj2);

17. 模块化:代码拆分与复用

ES6 原生支持模块化,使用export导出、import导入,实现代码解耦。

javascript

运行

复制代码
// 导出
export const name = "ES6";
// 导入
import { name } from "./test.js";

18. Babel 转换 ES6 模块化

浏览器对 ES6 模块化支持有限,使用Babel将 ES6 代码转为 ES5,兼容所有浏览器。

19. ES6 模块化引入 NPM 包

像导入自定义模块一样,直接引入 npm 安装的第三方包。

javascript

运行

复制代码
import $ from "jquery";
import axios from "axios";

20. Proxy:对象代理

创建对象代理,拦截对象的读取、赋值、删除等操作,实现数据监听(Vue3 响应式核心)。

javascript

运行

复制代码
const proxy = new Proxy({}, {
  get(target, prop) { return target[prop]; },
  set(target, prop, value) { target[prop] = value; }
});

三、总结

ES6 20 大核心特性覆盖了变量声明、代码简化、异步编程、数据结构、面向对象、工程化全场景:

  1. 基础语法:let/const、解构、模板字符串、箭头函数
  2. 函数增强:默认值、rest 参数、扩展运算符
  3. 数据类型:Symbol、Set、Map
  4. 异步与代理:Promise、Proxy
  5. 工程化:class、模块化、Babel 转换

掌握 ES6 是前端开发的入门门槛,也是面试高频考点,建议结合示例多练习,熟练运用到实际项目中!

本文已同步收录前端面试手册,建议收藏 + 点赞,持续更新 ES6 + 高级特性!

相关推荐
小雨下雨的雨23 分钟前
房产登记交易系统鸿蒙PC Electron框架技术实现详解
前端·华为·electron·harmonyos·鸿蒙·鸿蒙系统
Cobyte25 分钟前
16.响应式系统比对:链表如何实现 computed 的高效更新
前端·javascript·vue.js
踩着两条虫25 分钟前
开源 AI 低代码平台 VTJ.PRO 双版本齐发:核心引擎 v0.17.1 与在线平台 v2.4.1 正式上线,强化团队协作与 AI 资产管理
前端·人工智能·低代码·架构·开源
铁皮饭盒30 分钟前
sharp.js安装不上, Bun.Image说: 我不用安装
前端·后端
陈_杨31 分钟前
鸿蒙APP开发-带你走进黑胶阁的唱片收藏怎么管理
前端·javascript
一天 24h31 分钟前
Pinia 新手完全指南:从入门到精通的实战教程
前端·javascript·vue.js·pycharm·前端框架
向日的葵00632 分钟前
快速了解vue中的路由如何实现(路由一)
前端·vue.js·vue·路由
珎珎啊33 分钟前
React 和 Vue 3的区别
前端·vue.js·react.js
shadow_glory37 分钟前
vue3自定义指令directives
前端·javascript·vue.js
Front思37 分钟前
如何学习Shopify前端开发?
前端·学习