鲜荣彬
Herry

1、函数参数允许设置默认值

   ES6中允许为函数参数设置默认值。定义了默认值的参数,应该是函数的尾参数。

  function setPerson(name, age=19, type='people') {
         arguments;
   return [name,age,type]; }

      如果 setPerson('jack',19),则 arguments 中只包含  ["jack",19], 不包含 type的值。

      如果需要 获取默认的 age值,而又需要传入type值,则应该传入 undefined,而 null 没有这种作用。

   setPerson('jack',undefined,'man');

 

    function setPerson({ age=18,sex='F'}={}) {
        //默认参数是空对象,但设置了对象解构赋值的默认值
    }

    function setPerson({ age,sex }={age: 19, sex: 'F'}) {
        //默认参数是有具体属性的对象,但是没有设置对象解构赋值的默认值
    }

 

2、函数的length 属性

   指定了默认值后,函数的length属性,将返回没有指定默认值的参数个数。

   此时,length属性将失真。

    

     如果设置了默认值的参数不是尾数,则后面属性 不再计入length计算。如下所示: length :1

(function(name,age=18,sex) { }).length

 

3、rest参数

   用于获取函数多余的参数,形式为  \ ...变量名 \。

  需要放在参数的最后位置(Rest parameter must be last formal parameter)。

function add(...values) {
  let sum = 0;
  for (let val of values) {
    sum += val;
  }
  return sum;
}

 

4、spread (扩展运算符)

   形式如  ...,好比rest参数的逆运算,将数组转换为参数序列。

   (1)替代数组的apply方法。   

//求得最大值
function getMax(values) {
return Math.max(...values);
//ES5 Math.max.apply(null,values);
}
let args1=[1,2,3],
   args2[6,7,9];


args2.push(...args1);
//合并数组
[...args1,...args2);
new Date(...[2015, 1, 1]);

  (2)与解构赋值结合,  \ ...A\ , ... A 只能放在最后一位。

const[first,...rest]=[1,3,5,5];

   (3)可以将字符串转换为真正的数组。

[...'hello'];  //还有一个优势是,能够正确识别 32位 Unicode字符

  (4)可以将实现了 Iterator接口的对象,转换成真正的数组。

    如 NodeList, Map和Set结构,Generator函数。

5、箭头函数

  感觉有点 和 lambda表达式很类似。

  最简单如下

var getName=function(name){
    return name;  
}

===

var getName= name =>name;

var getName= (name,age)=>{ return name; } ;

===
var getName= (name)=>( { name:name } );

   其中 圆括号内表示参数信息, 代码块 { } 中表示逻辑信息。

   规则如下:

    1、如果 不需要参数或需要多个参数,使用一个圆括号 代表参数部分;

    2、如果 箭头函数代码块多余一条语句,使用大括号括起来;

    3、如果箭头函数 直接返回一个对象,必须在对象外 加上括号 ,因为大括号被解释成代码块。

   

  

  

  

   

  

 

posted on 2017-06-26 17:50  Herry彬  阅读(340)  评论(0)    收藏  举报