H5Web前端开发@IT·程序猿

ES6新特性整理

2017-04-02  本文已影响700人  zhangivon

let和const命令

变量的解构赋值

ES6按照模式匹配,从** 数组 对象 **中按照属性名称提取值,对变量进行赋值。

  1. 数组的元素是按次序排列的,变量的取值由它的位置决定;
  2. 对象的属性没有次序,变量必须与属性同名,才能取到正确的值
    let { baz } = { foo: "aaa", bar: "bbb" };
    baz // undefined
- 对象的解构赋值的内部机制:先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。
      let obj = { first: 'hello', last: 'world' };
      let { first: f, last: l } = obj;
      f // 'hello'
      l // 'world'

  > 上面代码中,first和last是匹配的模式,f和l才是变量。真正被赋值的是变量f和l,而不是模式first和last。
- 对象的解构也可以指定默认值 (** 默认值生效的条件是,对象的属性值严格等于undefined **)
      var {x = 3} = {};
      x // 3

      var {x, y = 5} = {x: 1};
      x // 1
      y // 5 
      
      // 属性值为undefined
      var {x = 3} = {x: undefined};
      x // 3

      var {x = 3} = {x: null};
      x // null

字符串的扩展

Paste_Image.png

数值的扩展

Paste_Image.png

数组的扩展

Paste_Image.png

函数的扩展

Paste_Image.png

Symbol

ES6为了防止属性名的冲突,引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的Symbol类型。

Set和Map数据结构 ###

Paste_Image.png

Promise对象

Promise 是异步编程的一种解决方案,比传统的解决方案回调函数和事件更合理和更强大。

    var promise = new Promise(function(resolve, reject) {
      // ... some code

      if (/* 异步操作成功 */){
          resolve(value);
      } else {
        reject(error);
      }
    });

Promise还可以做更多的事情,比如,有若干个异步任务,需要先做任务1,如果成功后再做任务2,任何任务失败则不再继续并执行错误处理函数。
要串行执行这样的异步任务,不用Promise需要写一层一层的嵌套代码。有了Promise,我们只需要简单地写:

 job1.then(job2).then(job3).catch(handleError); 

注意执行顺序:Promise实例新建后立即执行——>然后执行当前脚本所有同步任务——>执行完才会执行then方法指定的回调函。

Generator

Generator 函数是 ES6 提供的一种异步编程解决方案。Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield语句,定义不同的内部状态。

function* helloWorldGenerator() {
  yield 'hello';
  yield 'world';
  return 'ending';
}

var hw = helloWorldGenerator(); 
hw.next()
// { value: 'hello', done: false }

hw.next()
// { value: 'world', done: false }

hw.next()
// { value: 'ending', done: true }

hw.next()
// { value: undefined, done: true }  

class

Paste_Image.png

ES6定义一个类,如下:

//定义类
class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
}

  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}  

模块module

模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。

上一篇下一篇

猜你喜欢

热点阅读