溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript剩余操作符Rest Operator詳解

發(fā)布時(shí)間:2020-09-20 07:32:14 來(lái)源:腳本之家 閱讀:193 作者:ITman彪叔 欄目:web開發(fā)

剩余操作符

之前這篇文章JavaScript展開操作符(Spread operator)介紹講解過(guò)展開操作符。剩余操作符和展開操作符的表示方式一樣,都是三個(gè)點(diǎn) '…',但是他們的使用場(chǎng)景會(huì)不同。

剩余參數(shù)

定義函數(shù)的時(shí)候,如果函數(shù)的參數(shù)以… 為前綴,則改參數(shù)是剩余參數(shù)(rest parameter)。剩余參數(shù)表示參數(shù)個(gè)數(shù)不確定的參數(shù)列表。在函數(shù)被調(diào)用時(shí),該形參會(huì)成為一個(gè)數(shù)組,數(shù)組中的元素都是傳遞給該函數(shù)的多出來(lái)的實(shí)參的值。

獲取參數(shù)

剩余操作符可以用來(lái)方便地獲取傳進(jìn)來(lái)的參數(shù)。

function sum(a,b,...args){
 console.log(args.length); // 傳進(jìn)來(lái)的參數(shù)的個(gè)數(shù) 3
 let s = a + b;
 if(args && args.length){
  args.forEach(i => {s += i});
 } 
 return s;
}
sum(1, 2, 3, 4, 5 ); // 傳進(jìn)來(lái)的參數(shù)的個(gè)數(shù) 3

其中第一個(gè)形參a對(duì)應(yīng)的是1,第二個(gè)形參b對(duì)應(yīng)的2,…args表示的就是[3, 4, 5]。

和arguments的差別

上面剩余參數(shù)args是一個(gè)數(shù)組,而函數(shù)的arguments是一個(gè)偽數(shù)組。應(yīng)此剩余參數(shù)可以使用數(shù)組的相關(guān)方法sort,map,forEach,pop,而arguments不能。

arguments想要變成數(shù)組,可以通過(guò)Array.prototype.slice.call方法,使用剩余操作符可以避免將arguments轉(zhuǎn)為數(shù)組的麻煩。

// 下面的代碼模擬了剩余數(shù)組
function sum(a,b,){
 var args = Array.prototype.slice.call(arguments, sum.length); 
 console.log(args.length); // 傳進(jìn)來(lái)的參數(shù)的個(gè)數(shù) 3
 let s = a + b;
 args.forEach(i => {s += i});
 return s;
}
sum(1, 2, 3, 4, 5 );

而使用剩余操作符,則不需要轉(zhuǎn)化,直接使用,更加方便。

剩余操作符與解構(gòu)賦值

我們知道,ES6 允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)(Destructuring)。 比如如下代碼:

let array = [1,2,3]
let [a,b,c] = array; // a 1, b 2, c 3

再比如如下代碼:

let obj = {a:1,b:2,c:3}
let {a,b,c} = obj; // a 1, b 2, c 3

在解構(gòu)賦值時(shí),可以使用剩余操作符。剩余操作符所操作的變量會(huì)匹配在解構(gòu)賦值中所有其他變量未匹配到的屬性。
比如如下代碼,others會(huì)匹配到first和second對(duì)于屬性的余下的屬性:

const { first, second, ...others } = {
 first: 1,
 second: 2,
 third: 3,
 fourth: 4,
 fifth: 5
}

first // 1
second // 2
others // { third: 3, fourth: 4, fifth: 5 }

對(duì)象中余下的屬性值被打包起來(lái)構(gòu)造一個(gè)新的對(duì)象賦值給了others。

數(shù)組也可以通過(guò)剩余操作符,把剩余的元素打包成一個(gè)新的數(shù)組賦值給剩余屬性,代碼如下:

let array = [1,2,3,4,5];
let [a,b,...c] = array; // a 1,b 2, c [3,4,5]

剩余操作符和展開操作符

某種程度上,可以任務(wù)剩余操作符是展開操作符的相反操作。展開操作符會(huì)”展開“數(shù)組編程多個(gè)元素,剩余操作符會(huì)把多個(gè)元素壓縮成一個(gè)單一的元素。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI