JavaScript中剩余參數(shù)的使用詳解
MDN JavaScript官網對剩余參數(shù)的解釋: developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Rest_parameters
區(qū)分展開語法和剩余參數(shù)
JavaScript中的剩余參數(shù)使用在**賦值號右側,或具有迭代屬性的數(shù)組、函數(shù)和對象。 **可以用來連接兩個數(shù)組或字符串等迭代??對象。
const arr = [1, 2, ...[3, 4]]; console.log(arr);
與展開語法相反,剩余參數(shù)是用在**賦值號左側的,具有迭代屬性的數(shù)組、函數(shù)和對象。 **并且剩余參數(shù)會將獲取到的結果以數(shù)組的形式進行存儲。
// 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: '意大利????經典', location: 'Via Angelo Tavanti 23, 佛羅倫薩, 意大利', categories: ['意大利', '比薩店', '素食', '有機'], starterMenu: ['佛卡夏', '意式烤面包', '大蒜面包', '卡普雷塞沙'], mainMenu: ['披薩', '意大利面', '燴飯'], }; const [pizza, , risotto, ...otherFood] = [ ...restaurant.mainMenu, ...restaurant.starterMenu ]; console.log(pizza, risotto, otherFood);
剩余參數(shù)必須是數(shù)組中最后一個元素,如果不是數(shù)組中的最后一個元素,程序將返回錯誤并終止運行。這同樣意味著,在任何解構數(shù)組或對象中,剩余參數(shù)只能使用一次。
const [pizza, , risotto, ...otherFood, bread] = [ ...restaurant.mainMenu, ...restaurant.starterMenu ]; // An Error will be occur!將會出現(xiàn)一個錯誤 console.log(pizza, risotto, otherFood);
利用剩余參數(shù)獲取對象中的其他屬性
const restaurant = { name: '意大利????經典', location: 'Via Angelo Tavanti 23, 佛羅倫薩, 意大利', categories: ['意大利', '比薩店', '素食', '有機'], 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ù)獲取多個參數(shù)
通常情況下,我們會給一個函數(shù)在函數(shù)聲明階段給予固定的參數(shù),并且調用函數(shù)階段同樣填入固定數(shù)量的參數(shù)。
const add = function (num1, num2) { console.log(numb1, num2); } add(2, 3);
但利用剩余參數(shù)功能,你可以在聲明函數(shù)時不限定參數(shù)數(shù)量,這樣在調用函數(shù)時可以填入任意數(shù)量的參數(shù)進行操作。
const add = function (...numbers) { console.log(numbers); } add(2, 3); add(5, 3, 7, 2); add(8, 2, 5, 3, 2, 1, 4);
這樣,你可以通過函數(shù)剩余參數(shù)功能改造add()
函數(shù),使其可以進行累加操作。
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ù)組內部的元素打包傳遞給add
函數(shù)。通過這種方式,你無需將想要相加的數(shù)字依次傳入函數(shù)。用展開語法即可方便的完成此項操作。
const x = [23, 5, 7]; console.log(add(...x)); // 利用展開語法再次將數(shù)組打包??
通過剩余參數(shù)操作對象內的方法
const restaurant = { name: '意大利????經典', location: 'Via Angelo Tavanti 23, 佛羅倫薩, 意大利', categories: ['意大利', '比薩店', '素食', '有機'], starterMenu: ['佛卡夏', '意式烤面包', '大蒜面包', '卡普雷塞沙'], mainMenu: ['披薩', '意大利面', '燴飯'], orderPizza: function (mainIngredient, ...otherIngredients) { console.log(mainIngredient); console.log(otherIngredients); } }; restaurant.orderPizza('蘑菇??', '蔥', '橄欖??', '菠菜??');
我們修改了restaurant
對象上的orderPizza
方法。其中第一個參數(shù)(主要成分)mainIngredient
只接收一個字符串,而第二個參數(shù)(其他成分)otherIngredients
因為在的剩余參數(shù)
的作用下可以傳入多個字符串,并將這些字符串自動封裝成一個數(shù)組傳入orderPizza
方法。這樣,我們就可以很方便的得到以下結果:
如果你不在對應的...otherIngredients
處傳入相關參數(shù),你會得到一個空數(shù)組。
restaurant.orderPizza('蘑菇??', '蔥', '橄欖??', '菠菜??'); //蘑菇??, // ['蔥', '橄欖??', '菠菜??'] restaurant.orderPizza('蘑菇??'); // 蘑菇?? // []
到此這篇關于JavaScript中剩余參數(shù)的使用詳解的文章就介紹到這了,更多相關JavaScript剩余參數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解如何在微信小程序開發(fā)中正確的使用vant ui組件
這篇文章主要介紹了詳解如何在微信小程序開發(fā)中正確的使用vant ui組件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09webpack開發(fā)環(huán)境和生產環(huán)境的深入理解
這篇文章主要介紹了webpack開發(fā)環(huán)境和生產環(huán)境的深入理解,詳細的介紹了什么是開發(fā)環(huán)境和生產環(huán)境并配置,非常具有實用價值,需要的朋友可以參考下2018-11-11JavaScript的變量聲明提升問題淺析(Hoisting)
大家應該都只奧javascript的變量聲明具有hoisting機制,JavaScript引擎在執(zhí)行的時候,會把所有變量的聲明都提升到當前作用域的最前面。網上關于JavaScript的變量聲明提升問題的文章有很多,這篇文章將再次談談關于這方面的問題,有需要的朋友們可以參考借鑒。2016-11-11javacript replace 正則取字符串中的值并替換【推薦】
replace() 方法用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。這篇文章主要介紹了javacript replace 正則取字符串中的值并替換,需要的朋友可以參考下2018-09-09