亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

深入學習JavaScript中的Rest參數和參數默認值

2024-05-06 16:23:55
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了深入學習JavaScript中的Rest參數和參數默認值,是JS入門學習中的基礎知識,需要的朋友可以參考下

本文將討論使 JavaScript 函數更有表現力的兩個特性:Rest 參數和參數默認值。

Rest 參數

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

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

下面是傳統的實現方式:

 

 
  1. function containsAll(haystack) { 
  2. for (var i = 1; i < arguments.length; i++) { 
  3. var needle = arguments[i]; 
  4. if (haystack.indexOf(needle) === -1) { 
  5. return false
  6. return true
  7.  
  8. function containsAll(haystack) { 
  9. for (var i = 1; i < arguments.length; i++) { 
  10. var needle = arguments[i]; 
  11. if (haystack.indexOf(needle) === -1) { 
  12. return false
  13. return true

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

 

 
  1. function containsAll(haystack, ...needles) { 
  2. for (var needle of needles) { 
  3. if (haystack.indexOf(needle) === -1) { 
  4. return false
  5. return true
  6.  
  7. function containsAll(haystack, ...needles) { 
  8. for (var needle of needles) { 
  9. if (haystack.indexOf(needle) === -1) { 
  10. return false
  11. return true

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

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

參數的默認值

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

看下面例子:

 

 
  1. function animalSentence(animals2="tigers", animals3="bears") { 
  2. return `Lions and ${animals2} and ${animals3}! Oh my!`; 
  3.  
  4. function animalSentence(animals2="tigers", animals3="bears") { 
  5. return `Lions and ${animals2} and ${animals3}! Oh my!`; 

在每個參數的 = 后面是一個表達式,指定了參數未傳遞時的默認值。所以,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 不一樣的是,參數默認值的表達式是在函數調用時從左到右計算的,這意味著表達式可以使用前面已經被填充的參數。例如,我們可以將上面的函數變得更有趣一點:

 

 
  1. function animalSentenceFancy(animals2="tigers"
  2. animals3=(animals2 == "bears") ? "sealions" : "bears"
  3. return `Lions and ${animals2} and ${animals3}! Oh my!`; 
  4.  
  5.  
  6. function animalSentenceFancy(animals2="tigers"
  7. animals3=(animals2 == "bears") ? "sealions" : "bears"
  8. return `Lions and ${animals2} and ${animals3}! Oh my!`; 

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

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

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

 

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

等同于

 

 
  1. function myFunc(a=42, b=undefined) {...} 
  2.  
  3. 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 這兩個編譯器都已經支持了參數默認值,所以你可以大膽使用。

結論

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美高清视频一区二区| 欧美性视频在线| 911国产网站尤物在线观看| 国产91在线高潮白浆在线观看| 亚洲直播在线一区| 亚洲欧洲一区二区三区在线观看| 国产69精品久久久久99| 欧美国产高跟鞋裸体秀xxxhd| 久久综合免费视频影院| 亚洲欧美另类在线观看| 国产成人91久久精品| 亚洲综合精品伊人久久| 好吊成人免视频| 午夜精品一区二区三区视频免费看| 亚洲成人黄色在线| 亚洲一区亚洲二区| 国产香蕉97碰碰久久人人| 一区二区三区四区在线观看视频| 亚洲第一色在线| 亚洲欧美精品一区二区| 91成人福利在线| 亚洲午夜国产成人av电影男同| 国产视频精品va久久久久久| 欧美韩国理论所午夜片917电影| 日韩成人黄色av| 丝袜亚洲欧美日韩综合| 欧美电影在线观看完整版| 一区二区在线视频| 亚洲女人天堂av| 另类图片亚洲另类| 日韩视频免费中文字幕| 久久精品人人做人人爽| 久久久99免费视频| 日韩亚洲综合在线| 亚洲区一区二区| 久久精品99久久香蕉国产色戒| 国产精品福利久久久| 欧美在线www| 色yeye香蕉凹凸一区二区av| 亚洲xxxxx性| 久久韩国免费视频| 国产成人在线一区| 国产精品美女久久久免费| 久久夜精品香蕉| 国产欧美日韩精品丝袜高跟鞋| 国产精品美女在线观看| 欧美成人午夜免费视在线看片| 亚洲在线一区二区| 久久精品成人一区二区三区| 久久亚洲精品网站| 欧美午夜性色大片在线观看| 欧美国产精品人人做人人爱| 国产男女猛烈无遮挡91| 日韩亚洲精品视频| 日韩av在线看| 国产成人精品日本亚洲专区61| 亚洲高清免费观看高清完整版| 亚洲欧美三级在线| 久久久久久久网站| 色妞欧美日韩在线| 欧美大片网站在线观看| 国产精品爱久久久久久久| 久久综合网hezyo| 这里只有精品视频在线| 欧美另类极品videosbest最新版本| 97在线观看免费| 亚洲第一国产精品| 亚洲qvod图片区电影| 日韩在线中文视频| 欧美高清在线视频观看不卡| 久久久亚洲成人| 欧美性视频精品| 亚洲第一天堂无码专区| 91大神福利视频在线| 热99在线视频| 亚洲成年人在线播放| 丝袜情趣国产精品| 麻豆乱码国产一区二区三区| 久久av资源网站| 亚洲变态欧美另类捆绑| 亚洲国产天堂久久国产91| 精品视频中文字幕| 亚洲女在线观看| 乱亲女秽乱长久久久| 日韩a**中文字幕| 亚洲国产另类久久精品| 国产日本欧美视频| 深夜福利亚洲导航| 欧美久久久精品| 97免费视频在线| 亚洲成人久久久| 国产美女久久精品| 亚洲精品www久久久| 日韩在线免费视频| 国产日韩亚洲欧美| 91超碰caoporn97人人| 亚洲专区国产精品| 亚洲自拍欧美色图| 久久影视电视剧免费网站清宫辞电视| 91人成网站www| 亚洲一区亚洲二区亚洲三区| 欧美国产视频一区二区| 韩国三级电影久久久久久| 欧美国产亚洲精品久久久8v| 精品国产户外野外| 日韩精品免费看| 欧美日韩在线一区| 欧美日韩国产综合视频在线观看中文| 亚洲图片在区色| 久久久久久久久久久亚洲| 欧美高清在线视频观看不卡| 日本久久亚洲电影| 色悠悠国产精品| 久久久99久久精品女同性| 欧美性猛交丰臀xxxxx网站| 国产精品成人在线| 国产亚洲欧洲高清| 久久91精品国产| 国产精品jizz在线观看麻豆| 久久在线免费观看视频| 国产欧美久久一区二区| 国产精品成人国产乱一区| 色婷婷综合久久久久| 精品久久久久久久久中文字幕| 尤物九九久久国产精品的特点| 国产一区二区三区在线视频| 国产精品亚洲美女av网站| 久久99国产精品自在自在app| 欧美日韩国产综合视频在线观看中文| 亚洲电影成人av99爱色| 成人中文字幕+乱码+中文字幕| 亚洲最大福利网| 欧美成人性色生活仑片| 欧美猛少妇色xxxxx| 亚洲第一精品夜夜躁人人爽| 97人人做人人爱| 国产欧美一区二区三区在线看| 亚洲第一视频在线观看| 欧美老女人bb| 日韩精品视频免费在线观看| 97国产精品免费视频| 国内免费精品永久在线视频| 日韩精品在线观看网站| 亚洲xxxx做受欧美| www.日韩欧美| 日韩在线国产精品| 国产精品视频在线播放| 精品国产依人香蕉在线精品| 国产精品香蕉在线观看| 欧美日韩高清在线观看| 成人黄色激情网| 亚洲成人精品久久| 国产精品电影一区| 国色天香2019中文字幕在线观看| 国产精品专区h在线观看| 国产成人av网址| 亚洲第一视频网站| 国产精品专区一| 中文日韩在线观看| 欧美成人黑人xx视频免费观看| 国产丝袜一区视频在线观看| 欧美精品videos另类日本| 51久久精品夜色国产麻豆| 亚洲欧美在线x视频|