ES6(ECMAScript 2015 或 ECMAScript6)与 ES5 主要区别:

1. 变量声明

  • ES5: 只有 var 关键字用于变量声明,它有函数作用域或全局作用域。
  • ES6: 引入了 letconst 关键字,提供了块级作用域(block scope)支持。let 用于声明变量,const 用于声明常量。

2. 箭头函数

  • ES5: 不支持箭头函数,通常使用匿名函数表达式。
  • ES6: 引入了箭头函数,提供了更简洁的函数写法,并改变了 this 绑定的方式。

3. 类

  • ES5: 使用函数和原型来实现类和继承。
  • ES6: 引入了 classextends 关键字,提供了更接近传统面向对象编程的类声明方式。

4. 模板字符串

  • ES5: 拼接字符串需要使用加号 (+) 运算符。
  • ES6: 引入了模板字符串,使用反引号 () 来定义,可以包含占位符 ${expression}`,使得字符串拼接更加简洁。

5. 默认参数、剩余参数和展开运算符

  • ES5: 实现默认参数需要在函数体内部手动指定;没有直接的剩余参数或展开运算符支持。
  • ES6: 直接在函数声明时支持默认参数;引入了剩余参数 (...args) 和展开运算符 (...)。

6. 解构赋值

  • ES5: 不支持解构赋值。
  • ES6: 引入了解构赋值,允许从数组或对象中提取值,并赋值给多个变量。

7. 模块

  • ES5: 不原生支持模块,使用库(如 CommonJS、AMD)来实现模块功能。
  • ES6: 原生支持模块导入(import)和导出(export)。

8. Promises

  • ES5: 异步编程依赖回调函数,容易导致回调地狱。
  • ES6: 引入了 Promise 对象,使得异步编程更加简洁和易于管理。

9. 新的数据结构

  • ES6: 引入了新的数据结构,如 MapSet,以及对应的 WeakMapWeakSet

10. 迭代器和生成器

  • ES6: 引入了迭代器 (Iterator) 和生成器 (Generator),提供了新的遍历集合的方法。