ES6 新特性从入门到精通:100 + 代码示例带你轻松掌握(附图解教程)

本文针对 JavaScript 新手系统讲解 ES6 核心语法,涵盖变量声明、箭头函数、解构赋值、类与继承、Promise 等核心模块。通过150 + 行带注释代码,结合「传统写法对比」和「新手避坑指南」,帮助读者 3 小时掌握 ES6 关键特性,快速应用于项目开发。

一、ES6 入门:为什么必须学习 ES6?

1.1 ES6 的革命性升级

  • 代码简洁性:箭头函数、模板字符串等语法减少冗余代码
  • 逻辑清晰性:class 类、模块化语法让代码结构更易维护
  • 性能优化:Promise 解决异步回调地狱,提升代码执行效率

1.2 浏览器兼容性与开发工具

  • 主流支持:Chrome、Firefox 等现代浏览器支持 95% 以上 ES6 特性
  • 兼容旧浏览器:通过 Babel 工具将 ES6 代码转译为 ES5
  • 推荐工具:VS Code(ES6 语法高亮)、Babel(代码转换)

二、ES6 核心语法详解

2.1 变量声明:let 与 const(取代 var 的最佳实践)

传统 var 的痛点
// var的变量提升与重复声明问题  
console.log(num); // 输出undefined(变量提升)  
var num = 10;  

if (true) {  
  var name = '小明'; // 全局作用域  
}  
console.log(name); // 输出'小明'  
ES6 解决方案:let/const

特性

作用

示例代码

内存管理

let

块级作用域变量

let age = 18;

可重新赋值

const

块级作用域常量

const PI = 3.14;

不可重新赋值

// let的块级作用域示例  
if (true) {  
  let msg = 'Hello ES6';  
}  
console.log(msg); // 报错:msg未定义  

示意图:let 与 var 作用域对比

2.2 箭头函数:更简洁的函数写法

传统函数的缺陷
// 传统函数的this指向问题  
const obj = {  
  name: '张三',  
  sayHi: function() {  
    setTimeout(function() {  
      console.log(this.name); // 输出undefined(this指向window)  
    }, 1000);  
  }  
};  
ES6 箭头函数
// 箭头函数自动绑定外层this  
const obj = {  
  name: '张三',  
  sayHi: () => {  
    setTimeout(() => {  
      console.log(this.name); // 输出'张三'(this指向obj)  
    }, 1000);  
  }  
};  

语法糖对比表

场景

传统函数写法

箭头函数写法

简单函数

function(a,b){ return a+b; }

(a,b) => a+b

单参数函数

function(a){ return a*2; }

a => a*2

无参数函数

function(){ return 'hi'; }

() => 'hi'

2.3 解构赋值:快速提取数据

数组解构:按位置提取值
// 传统写法:手动赋值  
const arr = [1, 2, 3];  
const first = arr[0];  
const second = arr[1];  

// ES6解构写法  
const [first, second] = arr; // first=1, second=2  
对象解构:按属性名提取值
const user = { id: 1, name: '李四' };  
const { id, name } = user; // id=1, name='李四'  

实战案例:解构函数参数

// 传统写法:对象属性访问  
function renderUser(user) {  
  console.log(user.name, user.age);  
}  

// ES6解构写法  
function renderUser({ name, age }) {  
  console.log(name, age); // 直接获取属性  
}  
renderUser({ name: '王五', age: 25 }); // 输出:王五 25  

2.4 模板字符串:动态拼接字符串神器

传统字符串拼接痛点
const name = '张三';  
const age = 18;  
console.log('姓名:' + name + ',年龄:' + age); // 繁琐易错  
ES6 模板字符串
console.log(`姓名:${name},年龄:${age}`); // 输出:姓名:张三,年龄:18  

高级用法:多行字符串与表达式

const html = `<div>  
  <h1>${title}</h1>  
  <p>内容:${content}</p>  
</div>`;  

2.5 类与继承:面向对象编程简化

传统构造函数写法
// 构造函数  
function Animal(name) {  
  this.name = name;  
}  
Animal.prototype.speak = function() {  
  console.log(`${this.name}叫`);  
};  

// 继承  
function Dog(name) {  
  Animal.call(this, name);  
}  
Dog.prototype = Object.create(Animal.prototype);  
ES6 class 语法
// 定义类  
class Animal {  
  constructor(name) {  
    this.name = name;  
  }  
  speak() {  
    console.log(`${this.name}叫`);  
  }  
}  

// 继承  
class Dog extends Animal {  
  speak() {  
    super.speak(); // 调用父类方法  
    console.log('汪汪汪');  
  }  
}  

2.6 Promise 与异步编程:告别回调地狱

传统回调地狱案例
// 多层嵌套的回调函数  
getData((data1) => {  
  processData(data1, (data2) => {  
    saveData(data2, (result) => {  
      console.log(result);  
    });  
  });  
});  
ES6 Promise 链式调用
getData()  
  .then(processData)  
  .then(saveData)  
  .then((result) => console.log(result))  
  .catch((error) => console.error(error));  

三、实战案例:用 ES6 重构传统代码

案例 1:数组过滤与映射

需求:从用户列表中筛选年龄 > 18 岁的用户,并返回姓名数组
传统写法
const users = [{ id: 1, name: '张三', age: 20 }, { id: 2, name: '李四', age: 17 }];  
const filtered = users.filter(function(user) {  
  return user.age > 18;  
});  
const names = filtered.map(function(user) {  
  return user.name;  
});  
ES6 写法
const names = users  
  .filter(user => user.age > 18)  
  .map(user => user.name);  

案例 2:对象属性合并

需求:合并两个用户对象,后者覆盖前者属性
传统写法
const user1 = { name: '张三', age: 18 };  
const user2 = { age: 20, gender: '男' };  
const merged = Object.assign({}, user1, user2); // { name: '张三', age: 20, gender: '男' }  
ES6 扩展运算符
const merged = { ...user1, ...user2 }; // 等价于Object.assign  

四、新手常见错误与避坑指南

4.1 变量作用域错误

错误代码

for (var i = 0; i < 5; i++) {  
  // ...  
}  
console.log(i); // 输出5(var的全局作用域)  

正确写法

for (let i = 0; i < 5; i++) {  
  // ...  
}  
console.log(i); // 报错(let的块级作用域)  

4.2 箭头函数滥用

错误场景:需要动态绑定 this 的构造函数中使用箭头函数

class Counter {  
  constructor() {  
    this.count = 0;  
    this.timer = setInterval(() => {  
      this.count++; // 正确:箭头函数继承外层this  
    }, 1000);  
  }  
}  

注意:箭头函数适合回调函数,不适合作为构造函数或需要动态 this 的场景

五、ES6 速查表:核心语法一图掌握

特性

传统语法

ES6 语法

适用场景

变量声明

var x = 1;

let x = 1; const y = 2;

块级作用域变量 / 常量

函数定义

function add() {}

(a,b) => a+b

简单函数、回调函数

字符串拼接

'a' + 'b'

`a${b}`

动态字符串、多行文本

数组解构

var a = arr[0];

const [a, b] = arr;

快速提取数组元素

对象继承

原型链继承

class Child extends Parent

面向对象编程

异步操作

回调函数嵌套

Promise.then()

网络请求、定时任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北泽别胡说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值