ES6函式擴充套件-rest引數
阿新 • • 發佈:2020-08-01
文章參考:https://es6.ruanyifeng.com/#docs/function#rest-引數
rest引數
ES6 引入 rest 引數(形式為
...變數名
),用於獲取函式的多餘引數,這樣就不需要使用arguments
物件了。rest 引數搭配的變數是一個數組,該變數將多餘的引數放入陣列中。
利用 rest 引數,可以向該函式傳入任意數目的引數:求和示例
function add(...values) { let sum = 0; for (var val of values) { sum += val; } return sum; } // 將所有的引數放入陣列中,傳遞給函式 add(2, 5, 3) // 輸出10
下面是一個rest 引數代替arguments
變數的例子。
// arguments變數的寫法
function sortNumbers() {
return Array.prototype.slice.call(arguments).sort();
}
// rest引數的寫法
const sortNumbers = (...numbers) => numbers.sort();
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 引數之後不能再有其他引數(即只能是最後一個引數),否則會 報錯
。
// 報錯
function f(a, ...b, c) {
// ...
}
函式的length
屬性,不包括 rest 引數。
(function(a) {}).length // 1 (function(...a) {}).length // 0 (function(a, ...b) {}).length // 1
------------恢復內容結束------------