JavsScript ES6
ES6(ECMAScript 2015 或 ECMAScript6)与 ES5 主要区别:
1. 变量声明
- ES5: 只有
var
关键字用于变量声明,它有函数作用域或全局作用域。 - ES6: 引入了
let
和const
关键字,提供了块级作用域(block scope)支持。let
用于声明变量,const
用于声明常量。
2. 箭头函数
- ES5: 不支持箭头函数,通常使用匿名函数表达式。
- ES6: 引入了箭头函数,提供了更简洁的函数写法,并改变了
this
绑定的方式。
3. 类
- ES5: 使用函数和原型来实现类和继承。
- ES6: 引入了
class
和extends
关键字,提供了更接近传统面向对象编程的类声明方式。
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: 引入了新的数据结构,如
Map
、Set
,以及对应的WeakMap
和WeakSet
。
10. 迭代器和生成器
- ES6: 引入了迭代器 (
Iterator
) 和生成器 (Generator
),提供了新的遍历集合的方法。