-
Notifications
You must be signed in to change notification settings - Fork 20
Description
1. 箭头函数
和包裹它的代码共享this、arguments
2. 类
闭包的方式。
3. 增强对象字面量
简写模式,键是值的字符串形式
父级方法,super
动态属性名
4. 模板字符串
支持多行字符串
使用${**}插入变量
5. 解构
模式匹配数组、对象
可以用在函数定义时的参数中
解构对象的时候可以重命名(:)和设置默认值(=)
解构数组可以设置默认值(=)
6. 扩展运算符
既可以用在对象(支持数组、普通对象、字符串)上也可以用在指向这些对象的变量
可以在函数被调用 / 数组被构造时, 将数组表达式或者string在语法层面展开
还可以在构造字面量对象时, 将对象表达式按key-value的方式展开(浅拷贝的用法)
用途:
- 等价于apply的方式
- 数组拷贝
- 连接多个数组
注意:
- 在数组或函数参数中使用展开语法时, 该语法只能用于可迭代(iterator)对象
- 剩余语法(Rest syntax) 看起来和展开语法完全相同,不同点在于, 剩余参数用于解构数组和对象
7. Let(定义变量) + Const(定义常量)
这两个关键字具有块级作用域。let是var的升级版。const仅允许被赋值一次,通过静态限制(Static restrictions )的方式阻止变量在赋值前被使用。
Object.assign() 函数会触发 setters,而展开语法则不会。
静态限制也叫暂时性死区
8. 迭代器和for...of
迭代器:是一个对象,它提供了一个next() 方法,用来返回序列中的下一项。这个方法返回包含两个属性:done和 value。
可迭代对象:可迭代对象有一个方法Symbol.iterator,该方法返回一个迭代器。该对象可以被 for...of 循环使用。
for ..of:会自动解压迭代器,也就是执行next()并返回结果对象的value属性
9. 生成器
Generator通过使用function和yield关键字简化了迭代器的编写。
通过function声明的函数会返回一个Generators实例。
Generator可以看做是迭代器的子类,包含了额外的next和throw方法。
yield是一个具有返回值(或抛出一个值)的表达式。
10. 模块和模块加载器
ES6从语言层面对模块进行了支持。编写方式借鉴了流行的JavaScript模块加载器(AMD, CommonJS)。
由宿主环境的默认加载器定义模块运行时的行为,采取隐式异步模式——在模块可以被获取和加载前不会有代码执行。
export default表示默认导出;export *表示导出另一个模块的所有导出内容,多用于合并导出。
export default expression;
export * from …;
import defaultExport from "module-name";
import * as name from "module-name";
11. 代理
Proxies允许创建一个可以全范围控制宿主对象行为的对象,可用于拦截,对象的虚拟化,日志记录/性能分析等。多用于拦截getter和setter。
12. Symbol
Symbol允许对象的属性不仅可以通过string(ES5)命名,还可以通过symbol命名。symbol是一种基本数据类型。
13. Map + Set + WeakMap + WeakSet
为常见算法的实现提供了更有效的数据结构。WeakMaps提供了对对象的弱引用(不会被垃圾回收计数)。
14. 类(class)和继承(extends)
语法糖。
15. 新增一些API:Math + Number + String + Object APIs
Number.EPSILON
Number.isInteger(Infinity) // false
Number.isNaN("NaN") // false
Math.acosh(3) // 1.762747174039086
Math.hypot(3, 4) // 5
Math.imul(Math.pow(2, 32) - 1, Math.pow(2, 32) - 2) // 2
"abcde".includes("cd") // true
"abc".repeat(3) // "abcabcabc"
Array.from(document.querySelectorAll("*")) // Returns a real Array
Array.of(1, 2, 3) // Similar to new Array(...), but without special one-arg behavior
[0, 0, 0].fill(7, 1) // [0,7,7]
[1,2,3].findIndex(x => x == 2) // 1
["a", "b", "c"].entries() // iterator [0, "a"], [1,"b"], [2,"c"]
["a", "b", "c"].keys() // iterator 0, 1, 2
["a", "b", "c"].values() // iterator "a", "b", "c"
Object.assign(Point, { origin: new Point(0,0) })
16. 二进制和八进制字面量
0b111110111 === 503 // true
0o767 === 503 // true
17. 支持Promise
异步编程。
18. Reflect API
Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与处理器对象的方法相同。Reflect不是一个函数对象,因此它是不可构造的。
19. Tail Calls(尾调用)
尾递归调用可以保证调用栈不会无限增长,使得在无界输入的情况下,递归算法是安全的。
参考
Babel Learn ES2015
10个最佳ES6特性
Javascript ES6 特性逐步解析
Reflect
10分钟学会ES7+ES8