We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
和包裹它的代码共享this、arguments
闭包的方式。
简写模式,键是值的字符串形式 父级方法,super 动态属性名
支持多行字符串 使用${**}插入变量
模式匹配数组、对象 可以用在函数定义时的参数中
解构对象的时候可以重命名(:)和设置默认值(=) 解构数组可以设置默认值(=)
既可以用在对象(支持数组、普通对象、字符串)上也可以用在指向这些对象的变量 可以在函数被调用 / 数组被构造时, 将数组表达式或者string在语法层面展开 还可以在构造字面量对象时, 将对象表达式按key-value的方式展开(浅拷贝的用法)
用途:
注意:
这两个关键字具有块级作用域。let是var的升级版。const仅允许被赋值一次,通过静态限制(Static restrictions )的方式阻止变量在赋值前被使用。
Object.assign() 函数会触发 setters,而展开语法则不会。
静态限制也叫暂时性死区
迭代器:是一个对象,它提供了一个next() 方法,用来返回序列中的下一项。这个方法返回包含两个属性:done和 value。 可迭代对象:可迭代对象有一个方法Symbol.iterator,该方法返回一个迭代器。该对象可以被 for...of 循环使用。 for ..of:会自动解压迭代器,也就是执行next()并返回结果对象的value属性
Generator通过使用function和yield关键字简化了迭代器的编写。 通过function声明的函数会返回一个Generators实例。 Generator可以看做是迭代器的子类,包含了额外的next和throw方法。 yield是一个具有返回值(或抛出一个值)的表达式。
ES6从语言层面对模块进行了支持。编写方式借鉴了流行的JavaScript模块加载器(AMD, CommonJS)。 由宿主环境的默认加载器定义模块运行时的行为,采取隐式异步模式——在模块可以被获取和加载前不会有代码执行。
export default表示默认导出;export *表示导出另一个模块的所有导出内容,多用于合并导出。
export default
export *
export default expression; export * from …; import defaultExport from "module-name"; import * as name from "module-name";
Proxies允许创建一个可以全范围控制宿主对象行为的对象,可用于拦截,对象的虚拟化,日志记录/性能分析等。多用于拦截getter和setter。
getter
setter
Symbol允许对象的属性不仅可以通过string(ES5)命名,还可以通过symbol命名。symbol是一种基本数据类型。
为常见算法的实现提供了更有效的数据结构。WeakMaps提供了对对象的弱引用(不会被垃圾回收计数)。
语法糖。
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) })
0b111110111 === 503 // true 0o767 === 503 // true
异步编程。
Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与处理器对象的方法相同。Reflect不是一个函数对象,因此它是不可构造的。
尾递归调用可以保证调用栈不会无限增长,使得在无界输入的情况下,递归算法是安全的。
Babel Learn ES2015 10个最佳ES6特性 Javascript ES6 特性逐步解析 Reflect 10分钟学会ES7+ES8
The text was updated successfully, but these errors were encountered:
No branches or pull requests
1. 箭头函数
和包裹它的代码共享this、arguments
2. 类
闭包的方式。
3. 增强对象字面量
简写模式,键是值的字符串形式
父级方法,super
动态属性名
4. 模板字符串
支持多行字符串
使用${**}插入变量
5. 解构
模式匹配数组、对象
可以用在函数定义时的参数中
解构对象的时候可以重命名(:)和设置默认值(=)
解构数组可以设置默认值(=)
6. 扩展运算符
既可以用在对象(支持数组、普通对象、字符串)上也可以用在指向这些对象的变量
可以在函数被调用 / 数组被构造时, 将数组表达式或者string在语法层面展开
还可以在构造字面量对象时, 将对象表达式按key-value的方式展开(浅拷贝的用法)
用途:
注意:
7. Let(定义变量) + Const(定义常量)
这两个关键字具有块级作用域。let是var的升级版。const仅允许被赋值一次,通过静态限制(Static restrictions )的方式阻止变量在赋值前被使用。
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)。
由宿主环境的默认加载器定义模块运行时的行为,采取隐式异步模式——在模块可以被获取和加载前不会有代码执行。
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
16. 二进制和八进制字面量
17. 支持Promise
异步编程。
18. Reflect API
Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与处理器对象的方法相同。Reflect不是一个函数对象,因此它是不可构造的。
19. Tail Calls(尾调用)
尾递归调用可以保证调用栈不会无限增长,使得在无界输入的情况下,递归算法是安全的。
参考
Babel Learn ES2015
10个最佳ES6特性
Javascript ES6 特性逐步解析
Reflect
10分钟学会ES7+ES8
The text was updated successfully, but these errors were encountered: