http://jspang.com/2017/06/03/es6/
一、let、const
1、let 不存在变量提升,暂时性死区
2、块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。
1 // IIFE 写法 2 (function () { 3 var tmp = ...; 4 ... 5 }()); 6 7 // 块级作用域写法 8 { 9 let tmp = ...; 10 ... 11 }
3、const申明的是只读的常量,一旦申明,无法改变。一旦申明,就必须初始化,不能后期赋值
4、const
命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
5、const
实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const
只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。
6、顶层对象,在浏览器环境指的是window
对象,在Node指的是global
对象。ES5之中,顶层对象的属性与全局变量是等价的。
7、ES6一方面规定,为了保持兼容性,var
命令和function
命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let
命令、const
命令、class
命令声明的全局变量,不属于顶层对象的属性。也就是说,从ES6开始,全局变量将逐步与顶层对象的属性脱钩。
8、global对象
二、变量的解构赋值
对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
三、扩展运算符(...)
四、字符串模板 (${})
五、新增的一些数组方法 Array.from()、Array.of()、find()、fill()、for...of
六、箭头函数
七、ES6中的对象
八、Symbol
九、set数据结构,和java里面的set一样
十、map数据结构,和java里面的map一样
十一、Proxy进行预处理
十二、Promise
十三、class 仿照的java里面的
十四、import 和export