美文网首页
ECMAScript 6 语法说明

ECMAScript 6 语法说明

作者: 渐行渐远ty | 来源:发表于2017-10-24 14:07 被阅读0次

    前言

    ECMAScript6相对于以前的JS来说是一个重要的版本更新,以下内容只节选了其中比较常用的语法更新

    let、const、global

    let用来申明变量,只在申请的代码块中生效,且在使用时必须先声明.
    const为常量申明,申明后不可改变
    global浏览器中,顶层对象是window,但 Node环境下为global(window为undefine).

    解构语法

    只要是可遍历(Iterator)对象,就可对其解构

    let arr = [1,2,3]
    let [a, b, c, d=2] = arr  // a= 1, b = 2,c = 3 .d = 2
    let dict = { 'age': 123, 'name': 112 }
    let { name, age } = dict //name = 112 , age = 123
    let str = '1df32sdfs'
    let [a, b, c] = str //a = 1 b = d c = f 
    

    函数扩展

    默认参数

    function (a, b = 3) {
    }
    

    rest参数

    function add(...values) {
      let sum = 0;
      for (var val of values) {
        sum += val;
      }
      return sum;
    }
    add(2, 5, 3) // 10
    

    箭头函数
    箭头函数中的this为定义时所在的对象,不可使用yield命令

    let add = ( x, y ) => {  return x + y  } 
    add(2, 3) //5
    

    对象扩展

    方法简写

    var o = {
      method() {
        return "Hello!";
      }
    };
    // 等同于
    var o = {
      method: function() {
        return "Hello!";
      }
    };
    

    导出模块和导入模块

    module.exports = { getItem, setItem, clear };
    // 等同于
    module.exports = {
      getItem: getItem,
      setItem: setItem,
      clear: clear
    };
    

    Set & Map

    set

    可以理解为值唯一的数组

    let a = new Set([1,2,3,4,1,'1']) //a 含有 1 2 3 4 '1'
    

    Map
    相对于对象,其中的key不止用字符串

    let a = ['1']
    let map1 =new Map()
    map.set(a:'value') 
    map.get(a)
    

    size

    let map1 =new Map()
    let b = map1.size  // 0
    map.set('a':'value') 
    let c = map1.size  // 1
    let isHas = map1.has('a') //true
    

    添加属性

    for ( let a in dict)
    obj[a] = dict[a]
    

    Proxy

    外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写,但是不适用箭头函数时 this会指向代理对象,所以可以将proxy指向对象自身. new Proxy(obj, obj)

    obj对象在调用set get has时会打印详情

    var obj = new Proxy({}, {
      get: function (target, key, receiver) {
        console.log(`getting ${key}!`);
        return Reflect.get(target, key, receiver);
      },
      set: function (target, key, value, receiver) {
        console.log(`setting ${key}!`);
        return Reflect.set(target, key, value, receiver);
      }
      has: function (target, propKey){
    console.log('has$(propKye)')
      return Reflect.has(target,proKey)
    }
    });
    

    Reflect

    提供函数,使得对于对象的属性或方法的的操作都变成函数行为

    old
    name in obj
    delete obj[name]
    
    new
    Reflect.has(obj, name)
    Reflect.deleteProperty(obj, name)
    

    提供方法

    Reflect.get(target, name, receiver) //get属性/方法
    Reflect.set(target, name, value, receiver)  //set属性/方法
    Reflect.has(obj, name) //判断属性方法
    Reflect.construct(target, args) //new方法
    Reflect.getPrototypeOf(obj) //get属性
    Reflect.setPrototypeOf(obj,value) //set 属性
    Reflect.apply(func, thisArg, args) //调用方法
    

    Promise

    Promise 是异步编程的一种解决方案,创建一个Promise对象,然后在对应操作完成时return resolve或者reject来回调结果

    function getData () {
      return new Promise(resolve, reject) {
          //get date
           if (isSuccess){
          return resolve(data)
        } else {
           return reject(err)
          }
        }
      }
    });
    
    getDate().then((data)=>{}).catch((err)=>{})
    

    Iterator

    js可遍历的类型主要是数组(Array)和对象(Object),ES6 又添加了Map和Set.
    Iterator 的遍历过程是这样的。

    • 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
    • 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
    • 第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
    • 不断调用指针对象的next方法,直到它指向数据结构的结束位置。

    自定义对象只需要实现next方法,返回值或者终止判定(如:undefine,-1,null)则可具有遍历属性,return throw可以在遍历完成/错误时进行操作(清空资源,输出错误信息)

    Generator

    Generator 函数是 ES6 提供的一种异步编程解决方案,Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield表达式,定义不同的内部状态(yield在英语里的意思就是“产出”)。

    function* helloWorldGenerator() {
      yield 'hello';
      let c =  yield 'world';
      return 'ending';
    }
    var func = helloWorldGeneratot() //在定义时不执行任何代码
    let step1 =  func.next() //'hello'
    let step2 = func.next('!') // 'world'  c = '!'
    let step3 = func.next() //'ending'
    

    相关文章

      网友评论

          本文标题:ECMAScript 6 语法说明

          本文链接:https://www.haomeiwen.com/subject/lvwxextx.html