国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

探討JavaScript中的Rest參數和參數默認值_基礎知識

來源:懂視網 責編:小采 時間:2020-11-27 21:41:09
文檔

探討JavaScript中的Rest參數和參數默認值_基礎知識

探討JavaScript中的Rest參數和參數默認值_基礎知識:Rest 參數 通常,我們需要創建一個可變參數的函數,可變參數是指函數可以接受任意數量的參數。例如,String.prototype.concat 可以接受任何數量的字符串作為參數。使用 Rest 參數,ES6 為我們提供一種新的方式來創建可變參數的函數。 我們來實現一個示例函數
推薦度:
導讀探討JavaScript中的Rest參數和參數默認值_基礎知識:Rest 參數 通常,我們需要創建一個可變參數的函數,可變參數是指函數可以接受任意數量的參數。例如,String.prototype.concat 可以接受任何數量的字符串作為參數。使用 Rest 參數,ES6 為我們提供一種新的方式來創建可變參數的函數。 我們來實現一個示例函數

Rest 參數

通常,我們需要創建一個可變參數的函數,可變參數是指函數可以接受任意數量的參數。例如,String.prototype.concat 可以接受任何數量的字符串作為參數。使用 Rest 參數,ES6 為我們提供一種新的方式來創建可變參數的函數。

我們來實現一個示例函數 containsAll,用于檢查一個字符串中是否包含某些子字符串。例如,containsAll("banana", "b", "nan") 將返回true,containsAll("banana", "c", "nan") 將返回 false。

下面是傳統的實現方式

該實現用到了 arguments 對象,該對象是一個類數組對象,包含函數被調用時的實參列表。這段代碼正是我們想要的,但其可讀性卻不是最優的。函數只有一個形參 haystack,所以不可能一看就知道該函數需要多個參數,并且在遍歷 arguments 時,需要特別注意遍歷的開始索引為1 ,而不是常見的 0,因為 arguments[0] 就是函數定義時的形參 haystack。如果我們想在 haystack 參數之前或之后添加一些參數,我們不得不更新內部的循環。Rest 參數解決了這些問題,下面是使用 Rest 參數的實現方式:

以上兩個實現都滿足了我們的需求,但后者包含一個特殊的 ...needles 語法。我們來看看調用containsAll("banana", "b", "nan") 時的細節,參數 haystack 和以往一樣,將用函數的第一個實參填充,值為 "banana",needles 前面的省略號表示它是一個 Rest 參數,剩余的所有實參將被放入一個數組中,并將該數組賦給 needles 遍量。在這個調用中,needles 的值為 ["b", "nan"]。然后,就是正常的函數執行了。

只能將函數的最后一個函數作為 Rest 參數,在函數被調用時,Rest 參數之前的參數都將被正常填充,之外的參數將被放入一個數組中,并將該數組作為 Rest 參數的值,如果沒有更多的參數,那么 Rest 參數的值為一個空數組 [],Rest 參數的值永遠都不會是 undefined。

參數的默認值

通常,調用一個函數時,不需要調用者傳遞所有可能的參數,那些沒有傳遞的參數都需要一個合理的默認值。JavaScript 對那些沒有傳遞的參數都有一個固定的默認值 undefined。在 ES6 中,引入了一種新方法來指定任意參數的默認值。

看下面例子:

在每個參數的 = 后面是一個表達式,指定了參數未傳遞時的默認值。所以,animalSentence() 返回 "Lions and tigers and bears! Oh my!", animalSentence("elephants") 返回"Lions and elephants and bears! Oh my!", animalSentence("elephants", "whales") 返回 "Lions and elephants and whales! Oh my!"。

參數默認值需要注意的幾個細節:

與 Python 不一樣的是,參數默認值的表達式是在函數調用時從左到右計算的,這意味著表達式可以使用前面已經被填充的參數。例如,我們可以將上面的函數變得更有趣一點:


那么,animalSentenceFancy("bears") 將返回 "Lions and bears and sealions. Oh my!"。

傳遞 undefined 等同于沒有傳遞該參數。因此,animalSentence(undefined, "unicorns") 將返回 "Lions and tigers and unicorns! Oh my!"。

如果沒有為一個參數指定默認值,那么該參數的默認值為 undefined,所以

代碼如下:function myFunc(a=42, b) {...}

function myFunc(a=42, b) {...}

等同于

代碼如下:function myFunc(a=42, b=undefined) {...}

function myFunc(a=42, b=undefined) {...}

拋棄 arguments

通過 Rest 參數和參數的默認值,我們可以完全拋棄 arguments 對象,使我們的代碼可讀性更高。此外,arguments 對象也加深了優化 JavaScript 的難題。

希望以上兩個新特性可以完全取代 arguments。作為第一步,在使用 Rest 參數或參數的默認值時,請避免使用 arguments 對象,假如 arguments 對象還不會立即被移除,或者永遠不會,那么也最好是避免在使用 Rest 參數或參數默認值時使用 arguments 對象。

兼容性

Firefox 15 以上的版本已經支持這兩個新特性。然而,除此之外,還沒有其他任何瀏覽器支持。最近,V8 的實驗環境添加了對 Rest 參數的支持,而參數默認值還有一個 issue,JSC 也對 Rest 參數和參數默認值提了一些 issue。

Babel 和 Traceur 這兩個編譯器都已經支持了參數默認值,所以你可以大膽使用。

結論

盡管從技術層面上看,這兩個新特性在并沒有給函數引入新的行為,但它們可以使一些函數的聲明更具表現力和可讀性。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

探討JavaScript中的Rest參數和參數默認值_基礎知識

探討JavaScript中的Rest參數和參數默認值_基礎知識:Rest 參數 通常,我們需要創建一個可變參數的函數,可變參數是指函數可以接受任意數量的參數。例如,String.prototype.concat 可以接受任何數量的字符串作為參數。使用 Rest 參數,ES6 為我們提供一種新的方式來創建可變參數的函數。 我們來實現一個示例函數
推薦度:
標簽: js 參數 的參數
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: h片在线看 | 国产最新视频 | 青青国产成人久久91网站站 | 91久久国产综合精品 | 免费国产在线视频 | 国产一区二区三区 韩国女主播 | 欧美一级成人影院免费的 | 卡通动漫亚洲综合 | 亚洲综合一区二区三区 | 午夜视频在线免费观看 | 最新国产精品精品视频 | 国产精品一区二区av | 国产一级自拍 | 国产欧美一区二区三区精品 | 国产一级一级一级成人毛片 | 日韩欧美亚洲综合一区二区 | a级精品国产片在线观看 | 大香伊人久久 | 国产精品资源在线观看 | 视频一区二区三区在线 | 国产精品一区二区国产 | 中文字幕有码在线播放 | 精品国产免费人成在线观看 | 日韩三级电影网站 | 国产日韩欧美视频在线观看 | 日韩在线视频观看 | 天天色啪 | 欧美 亚洲 另类 热图 | 日韩免费在线观看视频 | 国产成人精品日本亚洲语音2 | 日韩一页 | 欧美干 | 日韩欧美亚洲视频 | 亚洲国产日韩在线一区 | 欧美视频精品一区二区三区 | 免费精品国产日韩热久久 | 女同互忝互慰dv毛片观看 | 国产只有精品 | 亚洲欧美网址 | 亚洲国产精品免费 | 色另类 |