es6特性整理

2017-03-08  本文已影响0人  YomonAh

es6相较之前es5,增加了许多新的特性,提高了javascript体验,我在es6学习和使用的过程中进行了纪录。

  1. 箭头函数
    箭头函数简化了函数的书写方法,变的非常简洁,还能解决this指向问题。示例如下:
//es5写法:
var item = data.map( function ( item, i ){
      return item;
    })
//使用箭头函数
var item = data.map( (item,i) => {
      return item
    })
  1. 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.

  1. 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
  1. 模板字符串
    模板字符串相比起传统字符串与变量混合写法要简洁易懂的多,它使用反引号`来创建字符串,而里面的变量可以用${变量}来表示,示例如下:
//es5写法
var dom = '<div>hello,'+username+'</div>';
//es6语法
var dom = `<div>hello, ${username}</div>`;
  1. for...of 循环
    for...of循环是es6新引进的循环功能,它每次循环提供的是不同索引的值,示例如下:
var arr = [12,13,14,15,23];
for (i of arr){
   console.log(i);  //依次输出:12, 13, 14, 15, 23
}
  1. 默认参数
    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}`);
}
  1. 拓展运算符
    扩展运算符是三个点(...)。它好比 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);
  1. 对象字面量
    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
  1. 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/

上一篇 下一篇

猜你喜欢

热点阅读