ES6擴(kuò)展運(yùn)算符和rest運(yùn)算符用法實(shí)例分析
本文實(shí)例講述了ES6擴(kuò)展運(yùn)算符和rest運(yùn)算符用法。分享給大家供大家參考,具體如下:
運(yùn)算符可以很好的為我們解決參數(shù)和對(duì)象數(shù)組未知情況下的編程,讓我們的代碼更健壯和簡(jiǎn)潔。
運(yùn)算符有兩種:對(duì)象擴(kuò)展運(yùn)算符與rest運(yùn)算符。

1.對(duì)象擴(kuò)展( spread)運(yùn)算符(...)
(1)解決參數(shù)個(gè)數(shù)問(wèn)題
以前我們編程是傳遞的參數(shù)一般是確定,否則將會(huì)報(bào)錯(cuò)或者異常,如下:
function test(a,b,c,d) {
console.log(a)
console.log(b)
console.log(c)
console.log(d)
console.log(e)//e is not defined
}
test(1,2,3,4)
參數(shù)固定,多余的參數(shù)會(huì)出錯(cuò)。
但我們又想傳遞多個(gè)參數(shù),但是不確定參數(shù)的個(gè)數(shù),這時(shí)候可以使用對(duì)象擴(kuò)展運(yùn)算符來(lái)作參數(shù)。
function test1(...arg) {
console.log(arg[0]);//1
console.log(arg[1]);//2
console.log(arg[2]);//3
console.log(arg[3])//4
console.log(arg[4])//5
console.log(arg[5])//undefined
}
test1(1,2,3,4,5)
這時(shí)候程序是不會(huì)報(bào)錯(cuò)的,多余取值返回的結(jié)果是undefined。這說(shuō)明是可以傳入多個(gè)值,并且就算方法中引用多了也不會(huì)報(bào)錯(cuò)。
(2)解決數(shù)組賦值問(wèn)題
我們先用一個(gè)例子說(shuō)明,我們聲明兩個(gè)數(shù)組arr1和arr2,然后我們把a(bǔ)rr1賦值給arr2,然后我們改變arr2的值,你會(huì)發(fā)現(xiàn)arr1的值也改變了,因?yàn)槲覀冞@是對(duì)內(nèi)存堆棧的引用,而不是真正的賦值。
let arr1=['i','love','you'];
let arr2=arr1;
console.log("arr2====",arr2);
arr2.push('too');
console.log("arr1====>",arr1);
控制臺(tái)輸出的結(jié)果為:
["i", "love", "you"]
["i", "love", "you", "too"]
這是我們不想看到的,可以利用對(duì)象擴(kuò)展運(yùn)算符簡(jiǎn)單的解決這個(gè)問(wèn)題,現(xiàn)在我們對(duì)代碼進(jìn)行改造。
let arr1=['i','love','you'];
let arr2=[...arr1];
console.log(arr2);
arr2.push('too');
console.log(arr1);
最終可以看到我們的arr1并沒(méi)有改變,簡(jiǎn)單的擴(kuò)展運(yùn)算符就解決了這個(gè)問(wèn)題。
2.rest運(yùn)算符
(1)含義
rest參數(shù)作用: 將多余的逗號(hào)分隔的參數(shù)序列轉(zhuǎn)換為數(shù)組參數(shù)
注意: rest參數(shù)必須是最后一個(gè)參數(shù),否則報(bào)錯(cuò)。
rest運(yùn)算符與對(duì)象擴(kuò)展運(yùn)算符有很多類(lèi)似之處,它也用…(三個(gè)點(diǎn))來(lái)表示,比如:
function test(first,...arg){
console.log("first==>",first)//0
console.log("arg=====>",arg)
}
test(0,1,2,3,4,5,6,7);
輸出結(jié)果為:
first==> 0
arg=====>[1, 2, 3, 4, 5, 6, 7]
(2)如何循環(huán)輸出rest運(yùn)算符
用for…of循環(huán)來(lái)進(jìn)行打印出arg的值
function test(first,...arg){
for(let val of arg){
console.log(val)
}
}
test(0,1,2,3,4,5,6,7);
結(jié)果為:
1,2,3,4,5,6,7
最后總結(jié):
- 擴(kuò)展運(yùn)算符用三個(gè)點(diǎn)號(hào)表示,功能是把數(shù)組或類(lèi)數(shù)組對(duì)象展開(kāi)成一系列用逗號(hào)隔開(kāi)的值
- rest運(yùn)算符也是三個(gè)點(diǎn)號(hào),不過(guò)其功能與擴(kuò)展運(yùn)算符恰好相反,把逗號(hào)隔開(kāi)的值序列組合成一個(gè)數(shù)組
- 當(dāng)三個(gè)點(diǎn)(...)在等號(hào)左邊,或者放在形參上。為 rest 運(yùn)算符
- 當(dāng)三個(gè)在等號(hào)右邊,或者放在實(shí)參上,是 spread運(yùn)算符
或者說(shuō):放在被賦值一方是rest 運(yùn)算符。放在賦值一方式 spread運(yùn)算符。
感興趣的朋友可以使用在線(xiàn)HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
JS關(guān)于for循環(huán)中使用setTimeout的四種解決方案
這篇文章主要介紹了JS關(guān)于for循環(huán)中使用setTimeout的四種解決方案,想深入了解JS的同學(xué),一定要看下2021-05-05
一文概述ES7~12的語(yǔ)法及其相關(guān)使用規(guī)則
隨著JavaScript這門(mén)語(yǔ)言越來(lái)越流行,使得JavaScript這門(mén)語(yǔ)言越來(lái)越完善,這篇文章主要介紹了一文概述ES7~12的語(yǔ)法及其相關(guān)使用規(guī)則,需要的朋友可以參考下2023-01-01
微信小程序swiper組件用法實(shí)例分析【附源碼下載】
這篇文章主要介紹了微信小程序swiper組件用法,結(jié)合實(shí)例形式分析了微信小程序中swiper組件的功能、使用方法,并附帶完整源碼供讀者下載參考,需要的朋友可以參考下2017-12-12
詳解基于DllPlugin和DllReferencePlugin的webpack構(gòu)建優(yōu)化
這篇文章主要介紹了詳解基于DllPlugin和DllReferencePlugin的webpack構(gòu)建優(yōu)化,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06

