ES6之函数扩展

作者: ferrint | 来源:发表于2017-03-13 15:07 被阅读45次

    关键词:函数扩展

    参数的默认值
         function fn(a,b=3,c){
           return {a,b,c}
         }
         console.log(fn(1));  // Object {a: 1, b: 3, c: undefined}
    
    属性的默认值
       function ajax(options){
           var opt = {
            type:options.type || 'get'
           }
       };
    
    rest:获取函数的多余参数
      function fn1(a,b,c,...rest){
        console.log(rest)  // 用于获取函数的多余参数
       }
       fn1(1,2,3,4,5,6,7);
    
    // [4,5,6,7]
    
       var arr = [1,2,3,4,5,6,7];
       console.log(Math.max.apply(null, arr));
       // ES6 扩展运算符
       console.log(Math.max(...arr));
    
       var str = "ferrinte";
       var arr1 = [...str];  
       console.log(arr1); // ["f", "e", "r", "r", "i", "n", "t", "e"]
    
    箭头函数
    var f = v => v;
    //  相当于
    var f = function(v) {
      return v;
    };
    var f = () => 5;
    // 等同于
    var f = function () { return 5 };
    
    var sum = (num1, num2) => num1 + num2;
    // 等同于
    var sum = function(num1, num2) {
      return num1 + num2;
    };
    
    // 箭头函数可以与变量解构结合使用。
    const full = ({ first, last }) => first + ' ' + last;
    // 等同于
    function full(person) {
      return person.first + ' ' + person.last;
    }
    

    箭头函数使用注意:
    1.函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
    2.不可以当作构造函数,即不可以使用new命令,否则会抛出一个错误。
    3.不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。
    4.不可以使用yield命令,因此箭头函数不能用作Generator函数。
    this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。

    除了this,以下三个变量在箭头函数之中也是不存在的,指向外层函数的对应变量:arguments、super、new.target。
    箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变this的指向。

    Set()
       // 数据结构
       // Set 是一个构造函数,可以传入一个数组
       var set = new Set([1,2,3,3,4,4,5]);
       console.log(set);      // Set {1, 2, 3, 4, 5}
       console.log(set.size); //5
       set.add(6);
       set.delete(5);
       console.log(set);         // Set {1, 2, 3, 4, 6}
       console.log(set.has(6));  // true
       set.clear();
       console.log(set);    // Set {}
    
    Map()
       var obj = {
          name:'hexun'
       }
       var map = new Map([['name','lein'],['age','20'],['age','30'],[obj,23]]);
       map.set('sex','man')
       console.log(map);
       console.log(map.size);  // 4
       var arr = [...map];    
       console.log(arr);   // [Array[2], Array[2], Array[2], Array[2]]
    
       map.forEach(function(value,attr){
           console.log(arguments);  // 
       })
       for(var key of map.keys()){
           console.log(key)
       }
       for(var value of map.values()){
           console.log(value);
       }
       for(var [key,value] of map.entries()){
           console.log(key,value);
    
    Symbol()
       // 唯一ID 
       var s = Symbol();
       console.log(s);
       console.log(typeof s);
    
       var s1 = Symbol('test');
       var s2 = Symbol('test');
       console.log(s1 == s2);
    
    

    相关文章

      网友评论

        本文标题:ES6之函数扩展

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