溫馨提示×

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

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

ES6基礎(chǔ)之展開語(yǔ)法(Spread syntax)

發(fā)布時(shí)間:2020-10-01 09:05:58 來(lái)源:腳本之家 閱讀:141 作者:前端達(dá)人 欄目:web開發(fā)

展開語(yǔ)法用"..."進(jìn)行表示,展開語(yǔ)法將可迭代的對(duì)象拆分成獨(dú)立的值(語(yǔ)法層面展開)。擴(kuò)展語(yǔ)法通常用于將可迭代的對(duì)象的值傳遞到函數(shù)的參數(shù)中。今天小編將從以下方面進(jìn)行介紹:

  • 函數(shù)傳參中的應(yīng)用
  • 數(shù)組的相關(guān)應(yīng)用
  • 剩余參數(shù)的應(yīng)用
  • 函數(shù)傳參中的應(yīng)用

ES6之前,如果我們希望將數(shù)組作為參數(shù)分別傳遞給函數(shù)中的參數(shù),我們可以使用Function的apply()方法。如下段代碼所示:

function myFunction(a, b) {
 return a + b;
}
var data = [1, 4];
var result = myFunction.apply(null, data);
console.log(result); //Output "5”

從上述代碼,apply方法接受一個(gè)數(shù)組,將它們分拆成單獨(dú)參數(shù)傳遞函數(shù)進(jìn)行調(diào)用。

ES6的展開語(yǔ)法能讓我們以更簡(jiǎn)潔的方式進(jìn)行調(diào)用,如下段代碼所示:

function myFunction(a, b) {
  return a + b; 
}
let data = [1, 4];
let result = myFunction(...data);
console.log(result); //Output "5”

代碼運(yùn)行期間,JavaScript解釋器調(diào)用myFunction之前,將會(huì)用1,4表達(dá)式替換...運(yùn)算符:

let result = myFunction(...data);

上述代碼將會(huì)進(jìn)行如下轉(zhuǎn)換:

let result = myFunction(1,4);

替換后,函數(shù)中的代碼將會(huì)繼續(xù)執(zhí)行。

數(shù)組的相關(guān)應(yīng)用

數(shù)組的合并

展開語(yǔ)法可將數(shù)組添加到另外一個(gè)數(shù)組中,成為其中的一部分。

let array1 = [2,3,4];
let array2 = [1, ...array1, 5, 6, 7];
console.log(array2); //Output "1, 2, 3, 4, 5, 6, 7”

代碼運(yùn)行期間,如下代碼:

let array2 = [1, ...array1, 5, 6, 7];

上述代碼將會(huì)替換成如下代碼:

let array2 = [1, 2, 3, 4, 5, 6, 7];

在push方法中的運(yùn)用

有時(shí)候,我們需要將一個(gè)數(shù)組的內(nèi)容追加到另一個(gè)數(shù)組中,ES6之前我們可以這么做,如下段代碼所示:

var array1 = [2,3,4];
var array2 = [1];
Array.prototype.push.apply(array2, array1);
console.log(array2); //Output "1, 2, 3, 4”

ES6的展開語(yǔ)法能以更簡(jiǎn)潔的形式實(shí)現(xiàn),如下段代碼所示:

let array1 = [2,3,4];
let array2=[1];
array2.push(...array1);
console.log(array2); //Output "1, 2, 3, 4”

代碼運(yùn)行期間,如下代碼:

array2.push(...array1);

上述代碼將會(huì)替換成如下代碼:

array2.push(2, 3, 4);

傳遞多個(gè)數(shù)組參數(shù)

我們可以使用展開語(yǔ)法傳遞多個(gè)數(shù)組進(jìn)行參數(shù)傳遞,如下段代碼所示:

let array1 = [1];
let array2 = [2];
let array3 = [...array1, ...array2, ...[3, 4]];//multi arrayspread
let array4 = [5];
function myFunction(a, b, c, d, e) {
 return a+b+c+d+e;
}
let result = myFunction(...array3, ...array4); //multi array spread
console.log(result); //Output "15”

剩余參數(shù)的應(yīng)用

我們知道JS函數(shù)內(nèi)部有個(gè)arguments對(duì)象,可以拿到全部實(shí)參?,F(xiàn)在ES6給我們帶來(lái)了一個(gè)新的對(duì)象,可以拿到除開始參數(shù)外的參數(shù),即剩余參數(shù),我們可以使用展開語(yǔ)法...進(jìn)行獲取。

ES6之前,我們可以這樣獲取剩余參數(shù),如下段代碼所示:

function myFunction(a, b) {
  const args = Array.prototype.slice.call(arguments, myFunction.length);
  console.log(args);
}
myFunction(1, 2, 3, 4, 5); //Output "3, 4, 5”

ES6中,上述代碼我們可以這樣改下,如下段代碼所示:

function myFunction(a, b, ...args) {
  console.log(args); //Output "3, 4, 5"
}
myFunction(1, 2, 3, 4, 5);

是不是很簡(jiǎn)單,有個(gè)我們需要注意的事,一旦函數(shù)中的參數(shù)第一個(gè)參數(shù)使用剩余參數(shù),就不能聲明第二個(gè)非剩余參數(shù),否則將會(huì)拋出錯(cuò)誤。例如下段代碼所示:

function fn(...rest,foo) {} 
//Output "SyntaxError: Rest parameter must be last formal parameter"

小節(jié)

今天的內(nèi)容就到這里,展開語(yǔ)法是不是特別的酷啊,在日后的開發(fā)中,我們盡量使用新的語(yǔ)法糖替代舊的寫法。讓我們代碼看起來(lái)更加干凈、整潔、易懂。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(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