函数参数的默认值
利用参数默认值,可以制定某一个参数不得省略,如果省略就抛出一个错误
function throwIfMissing(){ throw new Error('Missing parameter'); } function foo(mustBeProvided = throwIfMissing()){ return mustBeProvided; }
rest参数
ES6引入了rest参数(…参数名),用于获取函数的多余参数,这样就不需要使用arguments对象了。rest参数搭配的变量一个数组,该变量将多余的参数放入数组中。function add(...values){ let sum = 0; for(var val of values){ sum += val; } return sum; } add(2, 5, 3) //10
rest参数中的变量代表一个数组,所以数组特有的方案都可以用于这个变量。下面是一个利用rest参数改写数组push方法的例子
function push(array,...items){ items.forEach(function(item){ array.push(item); console.log(item); }); } var a = []; push(a,1,2,3);
注意,rest参数之后不能再有其他参数,否则会报错。
扩展运算符(即将数组转化为用逗号分隔的参数序列)
该运算符主要用于函数调用function push(array,...items){ array.push(...items); } function add(x,y){ return x + y; //将数组转为参数序列 } var numbers = [4,38]; add(...numbers) //42
扩展运算符(spead)可以简化求出一个数组最大元素的写法
//ES5
Math.max.apply(null,[14,3,88])
//ES6
Math.max(…[14,3,88])
//等同于
Math.max(14,3,88])
上面代码表示,由于javascript不提供求数组最大元素的函数,所以只能套用Math.max函数,将数组转化为一个参数序列,然后求最大值。有了扩展运算符以后,就可以只用用Math.max了。
扩展运算符还可以用于数组的赋值
```
var a = [1];
var b = [2,3,4];
var c = [6,7];
var d = [0, ...a, ...b, 5, ...c];
d //[0, 1, 2, 3, 4, 5, 6, 7]
```
- 箭头函数
ES6允许使用箭头(=>)定义函数
var f = v => v;
//等同于
var f = function(v){
return v;
};
如果箭头函数不需要参数或需要多个参数,就使用一对圆括号代表参数部分
var f = () => 5;
//等同于
var f = function(){return 5};
var sum = (num1,num2) =>num1 + num2;
如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。
return getTempItem = id => ({ id :id, name: "Temp"});
箭头函数的一个用处是简化回调函数
//正常函数写法
[1,2,3].map(function (x){
return x*x;
});
//箭头函数写法
[1,2,3].map(x => x*x);
另一个例子
//正常函数写法
var result = values.sort(function(a,b){
return a - b;
});
//箭头函数写法
var result = values.sort((a,b)=> a - b);
箭头函数由几个使用注意点:
1.函数体内的this对象,绑定定义时所在的对象,而不是使用时所在的对象。
2.不可以当做构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
3.不可以使用arguments对象,该对象在函数体内部存在。
4.由于this在箭头函数中被绑定,所以不能用call(), apply(),bind()这些方法去改变this的指向。