六维教程

ES6 概述

ES6 是 JavaScript 诞生以来最大的一次版本升级

在它之前,JavaScript 写起来有很多”别扭”的地方;在它之后,JavaScript 正式从一个”脚本语言”走向了”工程语言”。

这篇先搞清三个问题:ES6 是什么、为什么要用、能带来什么。

ES6 是什么

先理清几个名字,后面看文档不会懵:

名字 含义
JavaScript 你平时写的语言,日常叫 JS
ECMAScript JavaScript 的官方标准名(简称 ES)
ES6 2015 年发布的第 6 版标准(所以也叫 ES2015)
ES5 ES6 之前最老、用得最广的旧标准(2009 年发布)

你可以把 ECMAScript 理解成”考纲”,JavaScript 是”考试”,浏览器和 Node.js 都得按考纲来。

为什么是 2015?其实 2015 年之后 ES 基本每年发布一个新版本(ES2016、ES2017……)。但 ES6 是断层式的大升级,影响最大,所以大家习惯拿”ES6”当现代 JS 的代名词,本系列的实用语法也大多以 ES6 为基础。

为什么要学 ES6

一句话:现在的 JavaScript 已经在大量使用 ES6 语法了

打开任意一个现代前端项目(Vue、React),letconst、箭头函数、解构赋值、Promiseimport/export 随处可见。如果你只会 ES5,会面临三个现实问题:

  1. 看不懂项目代码:遇到 =>...?. 这些新语法一头雾水。
  2. 写代码繁琐:同样的功能,ES5 写法又长又绕。
  3. 不知道好写法:很多”别人都在用、官方推荐”的写法,你完全没接触过。

学完 ES6,你会发现自己能”看懂”世界上的主流 JavaScript 代码了。

ES5 有哪些痛点

看看 ES6 之前写 JS 有多别扭,才能真正体会到它的价值。

1. 变量只能靠 var,作用域混乱

ES5 里只有 var,它没有”块级作用域”,容易造成变量泄漏和覆盖:

// ES5:var 没有块级作用域,if 里的 i 会"冲出"到大括号外
for (var i = 0; i < 3; i++) {
  // 循环体
}
console.log(i); // 3 —— i 竟然泄漏出来了!

而 ES6 用 let/const 彻底解决了这个问题。

2. 字符串拼接靠 +,一长串就眼花

// ES5:多个变量拼接,引号和加号满天飞
var name = '小明';
console.log('你好,' + name + ',欢迎回来!');

ES6 的模板字符串(反引号)直接写成这样:

const name = '小明';
console.log(`你好,${name},欢迎回来!`);

3. 对象和数组取值要一行行写

// ES5:从对象/数组里取数据,得一个变量一行
var user = { name: '小明', age: 18 };
var name = user.name;
var age  = user.age;

ES6 的解构赋值

const user = { name: '小明', age: 18 };
const { name, age } = user;  // 一行同时取出两个变量

4. 回调嵌套 → 回调地狱

ES5 时代异步只能写回调,逻辑一多就层层嵌套,人称”回调地狱”:

// ES5:嵌套层层加深,读起来很痛苦(示意)
asyncFunc1(function () {
  asyncFunc2(function () {
    asyncFunc3(function () {
      // ...继续嵌套
    });
  });
});

ES6 引入 Promise,后来的 async/await 更是让异步代码像同步一样平直。

上手路线建议

  • 想先验证语法:浏览器按 F12 打开控制台,直接把示例代码粘进去回车,立刻看结果。
  • 想跟着敲:在浏览器控制台里跟着每篇的示例动手敲一遍,效果最好。
  • 保持”懂了就过”的心态:ES6 语法很多,先用起来,等用到时再回来细品,比一口气全背下来更高效。
上一篇
ES6 教程
下一篇
ES6 let 和 const