剩余操作符
創(chuàng)新互聯(lián)建站是一家專業(yè)提供新沂企業(yè)網(wǎng)站建設,專注與成都網(wǎng)站設計、成都網(wǎng)站制作、HTML5、小程序制作等業(yè)務。10年已為新沂眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設計公司優(yōu)惠進行中。
之前這篇文章JavaScript展開操作符(Spread operator)介紹講解過展開操作符。剩余操作符和展開操作符的表示方式一樣,都是三個點 '…',但是他們的使用場景會不同。
剩余參數(shù)
定義函數(shù)的時候,如果函數(shù)的參數(shù)以… 為前綴,則改參數(shù)是剩余參數(shù)(rest parameter)。剩余參數(shù)表示參數(shù)個數(shù)不確定的參數(shù)列表。在函數(shù)被調用時,該形參會成為一個數(shù)組,數(shù)組中的元素都是傳遞給該函數(shù)的多出來的實參的值。
獲取參數(shù)
剩余操作符可以用來方便地獲取傳進來的參數(shù)。
function sum(a,b,...args){ console.log(args.length); // 傳進來的參數(shù)的個數(shù) 3 let s = a + b; if(args && args.length){ args.forEach(i => {s += i}); } return s; } sum(1, 2, 3, 4, 5 ); // 傳進來的參數(shù)的個數(shù) 3
其中第一個形參a對應的是1,第二個形參b對應的2,…args表示的就是[3, 4, 5]。
和arguments的差別
上面剩余參數(shù)args是一個數(shù)組,而函數(shù)的arguments是一個偽數(shù)組。應此剩余參數(shù)可以使用數(shù)組的相關方法sort,map,forEach,pop,而arguments不能。
arguments想要變成數(shù)組,可以通過Array.prototype.slice.call方法,使用剩余操作符可以避免將arguments轉為數(shù)組的麻煩。
// 下面的代碼模擬了剩余數(shù)組 function sum(a,b,){ var args = Array.prototype.slice.call(arguments, sum.length); console.log(args.length); // 傳進來的參數(shù)的個數(shù) 3 let s = a + b; args.forEach(i => {s += i}); return s; } sum(1, 2, 3, 4, 5 );
而使用剩余操作符,則不需要轉化,直接使用,更加方便。
剩余操作符與解構賦值
我們知道,ES6 允許按照一定模式,從數(shù)組和對象中提取值,對變量進行賦值,這被稱為解構(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
在解構賦值時,可以使用剩余操作符。剩余操作符所操作的變量會匹配在解構賦值中所有其他變量未匹配到的屬性。
比如如下代碼,others會匹配到first和second對于屬性的余下的屬性:
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 }
對象中余下的屬性值被打包起來構造一個新的對象賦值給了others。
數(shù)組也可以通過剩余操作符,把剩余的元素打包成一個新的數(shù)組賦值給剩余屬性,代碼如下:
let array = [1,2,3,4,5]; let [a,b,...c] = array; // a 1,b 2, c [3,4,5]
剩余操作符和展開操作符
某種程度上,可以任務剩余操作符是展開操作符的相反操作。展開操作符會”展開“數(shù)組編程多個元素,剩余操作符會把多個元素壓縮成一個單一的元素。