es6中引入了rest參數,樣式形如…xxx,用于獲取函數的多余參數,這樣就不需要使用arguments對象了。rest參數搭配的一個變量是一個數組,該變量將多余的參數放入數組中。例如:
function add(...value){console.log(value);let sum=0;for(var val of value){sum+=val }return sum
}
add(2,3,5);//10
上面代碼的add函數是一個求和函數,利用rest參數,可以向該函數傳入任意數目的參數。
下面是一個rest參數代替arguments變量的例子:
function sortNumbers(){return Array.prototype.slice.call(arguments).sort();
}//rest寫法
const sortNumbers=(...numbers)=>numbers.sort();
上面兩種寫法rest參數的寫法更加自然簡潔。
arguments對象不是數組,只是一個類數組對象。為了使用數組的方法,得使用Array.prototype.slice.call先將其轉為數組。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參數之后不能有其他參數,否則會報錯。
函數的length屬性不包括rest參數。
(function(a) {}).length // 1
(function(...a) {}).length // 0
(function(a, ...b) {}).length // 1