es6相较之前es5,增加了许多新的特性,提高了javascript体验,我在es6学习和使用的过程中进行了纪录。
- 箭头函数
箭头函数简化了函数的书写方法,变的非常简洁,还能解决this指向问题。示例如下:
//es5写法: var item = data.map( function ( item, i ){ return item; }) //使用箭头函数 var item = data.map( (item,i) => { return item })
- let 和 const
用于量的定义,let定义的量限定块级作用域,超出该作用域就无法读取到,并且同作用域内let声明的变量不能重复;而const用于定义常量,无法改变它的值,示例如下:
for( let i=0;i<5;i++) {} console.log(i) //i is not defined const DURATION = 3*1000; DURATION = 6*1000; //Assignment to constant variable.
- 类
es6引入了class关键字,它其实说js原型模式的包装,有了类的概念后,js的对象创建、继承、实例化、构造函数等就变得更加直观易懂。示例如下:
//首先定义一个类 class Fruit { constructor( name ){ this.name = name; } getName(){ console.log(this.name) } } //创建子类继承上面的类 class Banana extends Fruit{ constructor(name){ super(name); } testFunc(){ console.log('who is my father'); } } //测试 var fruit = new Fruit('fruit'); var banana = new Banana('banana'); fruit.getName(); //fruit banana.getName(); // banana banana.testFunc(); // who is my father
- 模板字符串
模板字符串相比起传统字符串与变量混合写法要简洁易懂的多,它使用反引号`来创建字符串,而里面的变量可以用${变量}来表示,示例如下:
//es5写法 var dom = '<div>hello,'+username+'</div>'; //es6语法 var dom = `<div>hello, ${username}</div>`;
- for…of 循环
for…of循环是es6新引进的循环功能,它每次循环提供的是不同索引的值,示例如下:
var arr = [12,13,14,15,23]; for (i of arr){ console.log(i); //依次输出:12, 13, 14, 15, 23 }
- 默认参数
es6中定义函数时可以给参数设置默认值,示例如下:
//es5写法 function getName(name){ var myName = name || 'rose'; console.log('my name is'+myName); } //es6 function getName(name='rose'){ console.log(`my name is ${name}`); }
- 拓展运算符
扩展运算符是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列,由于扩展运算符可以展开数组,所以不再需要apply方法,将数组转为函数的参数了。示例如下:
// es5的写法 function count(x, y, z) { console.log(x,y,z); } var arr = [0, 1, 2]; f.apply(null, arr); // es6的写法 function count(x, y, z) { console.log(x,y,z); } var arr = [0, 1, 2]; count(...arr);
- 对象字面量
es6可以在对象字面量里定义原型,可以不用function关键字来定义方法,也可以直接调用父类方法,示例如下:
var meat = { cook(){ console.log('cook meat'); } }; var human = { _proto_:meat, //指定该对象原型为meat,继承了meat fruit(){ console.log('I like fruit'); } }; meat.cook(); // cook meat human.cook(); // cook meat
- Promise对象
Promise是异步编程的一种解决方案,创建了Promise对象就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易,示例如下:
var promise = new Promise((resolve, reject)=>{ if(/*if success*/){ resolve('it completed'); }else{ reject(Error('it failed)); } }); //绑定处理程序 promise.then(function(result){ console.log(result); // 程序成功后会运行此处:it completed },function(err){ console.log(err); //程序失败会运行此处:it failed }
es6 的新特性/语法远不止上述总结的这些,具体中文文档请参考:http://es6.ruanyifeng.com/