ECMAScript6函數(shù)剩余參數(shù)(Rest Parameters)
我們知道JS函數(shù)內部有個arguments對象,可以拿到全部實參。現(xiàn)在ES6給我們帶來了一個新的對象,可以拿到除開始參數(shù)外的參數(shù),即剩余參數(shù)(廢話好多 O(∩_∩)O~)。
這個新的對象和arguments不一樣,它是程序員自定義的一個普通標識符,只是需要在前面加上三個點:...
function func(a, ...rest) { console.log(a) console.log(rest) } func(1) func(1, 2, 3, 4)
注意func的第二個參數(shù)rest,前面有三個點。定義好后調用了兩次,結果分別如下
可以看到第一次調用時,rest為一個空數(shù)組,第二次為[2, 3, 4]。
又比如,在前面定義2個參數(shù)
function func(a, b, ...rest) { console.log(a, b) console.log(rest) } func(1, 2) func(1, 2, 3, 4)
輸出結果如下
通過以上兩個示例應該已經了解剩余參數(shù)的意義了吧。
剩余參數(shù)嘛,所以后面就不要再跟其它的參數(shù)了,不然會報錯
function func(a, ...rest, b) { }
這里在rest后面加了一個參數(shù)b,F(xiàn)irefox會報錯
當您使用剩余參數(shù)后,函數(shù)的length屬性會發(fā)生一些變化
function func(a, b, ...rest) { } func.length // 2
即length不包含rest,為2。
有同學會想,剩余參數(shù)前面是否可以一個參數(shù)都沒有呢? 答案是肯定的
function func(...rest) { console.log(rest) } func(1) // [1] func(1, 2, 3, 4) // [1,2,3,4]
這里的rest實際和arguments功能差不多,有同學想這不就替代了arguments嗎? ECMAScript就是這個打算,在被廢棄的ES4里就已經有Rest Parameters(熟悉AS3的同學應該了解),ES4被廢棄后,Rest Parameters被保留到了ES6。
請注意,rest不能和arguments一起使用,會報錯
function func(...rest) { console.log(rest) console.log(arguments) }
Firefox控制臺如下
arguments和剩余參數(shù)的區(qū)別
arguments是一個偽數(shù)組(Array-like)
剩余參數(shù)是一個真正數(shù)組(Array),具有Array.prototype上的所有方法
arguments上有callee,callee上有caller
如
function func(a, ...rest) { console.log(rest instanceof Array) } func(1, 2) // true
最后我們以一個剩余參數(shù)實際應用作為結束
/* * 任意個數(shù)相加 * * **示例** * sum(1) * sum(1, 2) * sum(1, 2, 3) */ function sum(first, ...rest) { var result = first var i = 0 var len = rest.length while (i < len) { result += rest[i] i++ } return result }
以上所述就是本文的全部內容了,希望大家能喜歡。
相關文章
如何手動實現(xiàn)一個 JavaScript 模塊執(zhí)行器
這篇文章主要介紹了如何手動實現(xiàn)一個 JavaScript 模塊執(zhí)行器,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下2020-10-10JavaScript(js)處理的HTML事件、鍵盤事件、鼠標事件簡單示例
這篇文章主要介紹了JavaScript(js)處理的HTML事件、鍵盤事件、鼠標事件,結合實例形式分析了JavaScript針對HTML事件、鍵盤事件及鼠標事件的簡單處理方法,需要的朋友可以參考下2019-11-11JavaScript檢查某個function是否是原生代碼的方法
經常碰到需要檢查某個function是否是原生代碼,要檢測這一點,最簡單的辦法當然是判斷函數(shù)的 toString 方法返回的值2014-08-08你所不了解的javascript操作DOM的細節(jié)知識點(一)
這篇文章主要介紹了你所不了解的javascript操作DOM的細節(jié)知識點的相關資料,需要的朋友可以參考下2015-06-06ES6新特性五:Set與Map的數(shù)據(jù)結構實例分析
這篇文章主要介紹了ES6新特性五之Set與Map的數(shù)據(jù)結構,結合實例形式分析了ES6中Set與Map的功能、定義、屬性、結構與相關使用技巧,需要的朋友可以參考下2017-04-04