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、如果箭头函数 直接返回一个对象,必须在对象外 加上括号 ,因为大括号被解释成代码块。