ECMAScript 5 (ES5): 第5个ECMAScript版本,于2009年标准化。该标准几乎所有的浏览器都完全支持。
ECMAScript 6 (ES6)/ECMAScript 2015 (ES2015): 第6个ECMAScript版本,于2015年标准化。目前各大浏览器还只是部分支持。
接下来介绍它们主要的区别:
箭头函数和字符串嵌入:
constgreetings=(name)=>{return`hello ${name}`;}
甚至:
constgreetings=name=>`hello ${name}`;
常量声明(Const): 如同其它编程语言中的常量一样,但又有不同。这里的const代表了constant reference。也就是说,你可以修改其指向的对象的值。但是你不能修改其reference的值。
constNAMES=[];NAMES.push("Jim");console.log(NAMES.length===1);// trueNAMES=["Steve","John"];// error
块作用域变量:ES6中的新关键字let允许允许开发者将变量的作用域限定在块级别。不会像var一样变量提升。
参数默认值:允许在函数定义的时候指定默认的值。
// Basic syntaxfunctionmultiply(a,b=2){returna*b;}multiply(5);// 10
类定义和继承
ES6开始支持定义类(使用class关键字),构造函数(使用constructor关键字),和extend关键字来实现继承。
for-of操作
for...of语句用来迭代访问一个对象的所有属性。
Spread操作符:用于对象合并
constobj1={a:1,b:2}constobj2={a:2,c:3,d:4}constobj3={...obj1,...obj2}
Promise: Promises提供了一个处理异步操作的方法。你可以用回调函数来实现,但是Promise更加简洁和可读。
constisGreater=(a,b)=>{returnnewPromise((resolve,reject)=>{if(a>b){resolve(true)}else{reject(false)}})}isGreater(1,2).then(result=>{console.log('greater')}).catch(result=>{console.log('smaller')})
模块的export和import。
constmyModule={x:1,y:()=>{console.log('This is ES5')}}exportdefaultmyModule;
importmyModulefrom'./myModule';