【ES6最具代表性的几个特点】
常量、作用域、箭头函数、默认参数、对象代理
【常量】
| 常量 |
ES3 | 没有常量的定义 |
ES5 | 只能通过给window对象设置只读属性来设置所谓的常量 |
ES6 | 直接const定义 |
【作用域】
| var和let的区别 | 设置块作用域 |
ES5 | 函数体中有闭包;这里有一个变量声明提升;var i定义的步骤实际上被提升到最上面,所以for循环的每个循环体都是公用同一个i
| 使用只执行函数分开各自的作用域 |
ES6 | 块作用域:使用了let定义i;使得每一个for循环的循环体都具备单独的作用域 | 用花括号就行了 |
【箭头函数】
| 箭头函数 | 函数的作用域 |
ES5 | ES5中没有箭头函数: | 哪个对象调用了这个函数,函数中的this就指向这个对象 |
ES6 | ES6使用箭头函数 | 箭头函数中的this是定义这个函数时的this |
【函数的参数】
| 默认参数 | 可变参数 | 扩展运算符的一个例子 |
ES5 | ES5的函数在定义时,如果这个餐数可不传,你必须设置undefined下的值 | 当不确定函数会带几个参数时,ES5需要使用arguments这个关键字(它是一个伪数组,要先像下图一样把他转成数组,然后遍历数组) | ES5合并两个数组的做法 |
ES6 | ES6可以直接在函数定义里设置参数 ES6可以将x这个值直接地定义为函数,让它在没被赋值时可以自动调用某个函数 | ES6使用扩展运算符...a的形式,来扩展,这里的a是真数组,可以直接在函数中被操作; | ES6合并两个数组的做法 |
【对象代理】
| 私有变量(数据保护) |
ES3 | ES3中定义一个私有变量;要通过构造函数的方法;在构造函数里定义自定义方法来控制不可修改的变量 |
ES5 | ES5的做法,参考ES5设置常量的做法;通过把对象的属性设置为只读属性 |
ES6 | 在ES6中,通过设置Proxy代理来操作对象中的属性;说白了:先定义一个对象,然后再定义一个代理对象,平时操作的不是原先的对象,而是中间层的代理对象 |
(相关链接:https://www.imooc.com/learn/955)