JavaScript中剩余參數(shù)的使用詳解
MDN JavaScript官網(wǎng)對(duì)剩余參數(shù)的解釋: developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Rest_parameters
區(qū)分展開(kāi)語(yǔ)法和剩余參數(shù)
JavaScript中的剩余參數(shù)使用在**賦值號(hào)右側(cè),或具有迭代屬性的數(shù)組、函數(shù)和對(duì)象。 **可以用來(lái)連接兩個(gè)數(shù)組或字符串等迭代??對(duì)象。
const arr = [1, 2, ...[3, 4]]; console.log(arr);
與展開(kāi)語(yǔ)法相反,剩余參數(shù)是用在**賦值號(hào)左側(cè)的,具有迭代屬性的數(shù)組、函數(shù)和對(duì)象。 **并且剩余參數(shù)會(huì)將獲取到的結(jié)果以數(shù)組的形式進(jìn)行存儲(chǔ)。
// REST, because on LEFT side of = const [a, b, ...others] = [1, 2, 3, 4, 5]; // ...others 收集數(shù)組中未使用的元素 console.log(a, b, others);
利用剩余參數(shù)獲取數(shù)組中的其他元素
const restaurant = { name: '意大利????經(jīng)典', location: 'Via Angelo Tavanti 23, 佛羅倫薩, 意大利', categories: ['意大利', '比薩店', '素食', '有機(jī)'], starterMenu: ['佛卡夏', '意式烤面包', '大蒜面包', '卡普雷塞沙'], mainMenu: ['披薩', '意大利面', '燴飯'], }; const [pizza, , risotto, ...otherFood] = [ ...restaurant.mainMenu, ...restaurant.starterMenu ]; console.log(pizza, risotto, otherFood);
剩余參數(shù)必須是數(shù)組中最后一個(gè)元素,如果不是數(shù)組中的最后一個(gè)元素,程序?qū)⒎祷劐e(cuò)誤并終止運(yùn)行。這同樣意味著,在任何解構(gòu)數(shù)組或?qū)ο笾校S鄥?shù)只能使用一次。
const [pizza, , risotto, ...otherFood, bread] = [ ...restaurant.mainMenu, ...restaurant.starterMenu ]; // An Error will be occur!將會(huì)出現(xiàn)一個(gè)錯(cuò)誤 console.log(pizza, risotto, otherFood);
利用剩余參數(shù)獲取對(duì)象中的其他屬性
const restaurant = { name: '意大利????經(jīng)典', location: 'Via Angelo Tavanti 23, 佛羅倫薩, 意大利', categories: ['意大利', '比薩店', '素食', '有機(jī)'], starterMenu: ['佛卡夏', '意式烤面包', '大蒜面包', '卡普雷塞沙'], mainMenu: ['披薩', '意大利面', '燴飯'], openingHours: { thu: { open: 12, close: 22, }, fri: { open: 11, close: 23, }, sat: { open: 0, // Open 24 hours close: 24, }, }, }; const { sat, ...weekdays } = restaurant.openingHours; console.log(sat, weekdays);
利用剩余參數(shù)為函數(shù)獲取多個(gè)參數(shù)
通常情況下,我們會(huì)給一個(gè)函數(shù)在函數(shù)聲明階段給予固定的參數(shù),并且調(diào)用函數(shù)階段同樣填入固定數(shù)量的參數(shù)。
const add = function (num1, num2) { console.log(numb1, num2); } add(2, 3);
但利用剩余參數(shù)功能,你可以在聲明函數(shù)時(shí)不限定參數(shù)數(shù)量,這樣在調(diào)用函數(shù)時(shí)可以填入任意數(shù)量的參數(shù)進(jìn)行操作。
const add = function (...numbers) { console.log(numbers); } add(2, 3); add(5, 3, 7, 2); add(8, 2, 5, 3, 2, 1, 4);
這樣,你可以通過(guò)函數(shù)剩余參數(shù)功能改造add()
函數(shù),使其可以進(jìn)行累加操作。
const add = function (...numbers) { let sum = 0; for (let i = 0; i < numbers.length; i++) { sum += numbers[i]; } return sum; } console.log(add(2, 3)); // 5 console.log(add(5, 3, 7, 2)); // 17 console.log(add(8, 2, 5, 3, 2, 1, 4)); // 25
甚至你也可以在函數(shù)傳遞參數(shù)時(shí)使用擴(kuò)展語(yǔ)法,將數(shù)組內(nèi)部的元素打包傳遞給add
函數(shù)。通過(guò)這種方式,你無(wú)需將想要相加的數(shù)字依次傳入函數(shù)。用展開(kāi)語(yǔ)法即可方便的完成此項(xiàng)操作。
const x = [23, 5, 7]; console.log(add(...x)); // 利用展開(kāi)語(yǔ)法再次將數(shù)組打包??
通過(guò)剩余參數(shù)操作對(duì)象內(nèi)的方法
const restaurant = { name: '意大利????經(jīng)典', location: 'Via Angelo Tavanti 23, 佛羅倫薩, 意大利', categories: ['意大利', '比薩店', '素食', '有機(jī)'], starterMenu: ['佛卡夏', '意式烤面包', '大蒜面包', '卡普雷塞沙'], mainMenu: ['披薩', '意大利面', '燴飯'], orderPizza: function (mainIngredient, ...otherIngredients) { console.log(mainIngredient); console.log(otherIngredients); } }; restaurant.orderPizza('蘑菇??', '蔥', '橄欖??', '菠菜??');
我們修改了restaurant
對(duì)象上的orderPizza
方法。其中第一個(gè)參數(shù)(主要成分)mainIngredient
只接收一個(gè)字符串,而第二個(gè)參數(shù)(其他成分)otherIngredients
因?yàn)樵诘?code>剩余參數(shù)的作用下可以傳入多個(gè)字符串,并將這些字符串自動(dòng)封裝成一個(gè)數(shù)組傳入orderPizza
方法。這樣,我們就可以很方便的得到以下結(jié)果:
如果你不在對(duì)應(yīng)的...otherIngredients
處傳入相關(guān)參數(shù),你會(huì)得到一個(gè)空數(shù)組。
restaurant.orderPizza('蘑菇??', '蔥', '橄欖??', '菠菜??'); //蘑菇??, // ['蔥', '橄欖??', '菠菜??'] restaurant.orderPizza('蘑菇??'); // 蘑菇?? // []
到此這篇關(guān)于JavaScript中剩余參數(shù)的使用詳解的文章就介紹到這了,更多相關(guān)JavaScript剩余參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解如何在Javascript中使用Object.freeze()
這篇文章主要介紹了詳解如何在Javascript中使用Object.freeze(),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10如何使用big.js解決JavaScript浮點(diǎn)數(shù)精度丟失問(wèn)題
最近在項(xiàng)目中涉及到金額從元轉(zhuǎn)為分(乘100即可),發(fā)現(xiàn)乘法居然也會(huì)有精度丟失的問(wèn)題,關(guān)于浮點(diǎn)數(shù)計(jì)算精度丟失是很多語(yǔ)言都存在的問(wèn)題,本文給大家分享使用big.js解決JavaScript浮點(diǎn)數(shù)精度丟失問(wèn)題,感興趣的朋友一起看看吧2023-12-12前端大屏開(kāi)發(fā)3種主流適配方案總結(jié)
這篇文章主要介紹了前端大屏開(kāi)發(fā)3種主流適配方案的相關(guān)資料,分別是vwvh方案、scale方案和rem+vwvh方案,每種方案都有其優(yōu)缺點(diǎn),可以根據(jù)具體需求選擇合適的方法,需要的朋友可以參考下2025-03-03采用自執(zhí)行的匿名函數(shù)解決for循環(huán)使用閉包的問(wèn)題
這篇文章主要介紹了采用自執(zhí)行的匿名函數(shù)解決for循環(huán)使用閉包的問(wèn)題,很簡(jiǎn)單,但比較實(shí)用,需要的朋友可以參考下2014-09-09微信小程序 MinUI組件庫(kù)系列之badge徽章組件示例
這篇文章主要介紹了微信小程序 MinUI組件庫(kù)系列之badge徽章組件示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08web前端開(kāi)發(fā)upload上傳頭像js示例代碼
這篇文章主要為大家詳細(xì)介紹了web前端開(kāi)發(fā)upload上傳頭像js示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10JavaScript之排序函數(shù)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
排序也是在程序中經(jīng)常用到的算法。這篇文章主要介紹了JavaScript之排序函數(shù),有興趣的可以了解一下2017-06-06javascript中$(function() {});寫與不寫有哪些區(qū)別
javascript中$(function() {....}) 是jQuery中的經(jīng)典用法,等同于 $(document).ready(function() {....}) javascript中$(function() {});寫與不寫有哪些區(qū)別,需要的朋友可以參考下2015-08-08