ECMAScript 6 語法學習——rest參數(shù)與展開運算符

rest參數(shù)

為了解決JavaScript函數(shù)傳入任意數(shù)量參數(shù)時愧杯,存在的一些小問題晾咪,在ECMAScript 6中引入了rest參數(shù)收擦,通過在函數(shù)的明明參數(shù)前添加三個點(...)來標識rest參數(shù),解決多參傳入問題

原始方式接收任意數(shù)量參數(shù)

function calculate(op) {
    if (op === "+") {
        let result = 0
        for (let i = 1; i < arguments.length; i++) {
            result += arguments[i]
        }
        return result
    } else if (op === "*") {
        let result = 1
        for (let i = 1; i < arguments.length; i++) {
            result *= arguments[i]
        }
        return result
    }
}

上面通過一個小例子展示了arguments對象在處理任意數(shù)量參數(shù)傳入的問題谍倦,但是這種方式仍有一些不足的地方:

  • 調(diào)用者需要知道該函數(shù)可以接受任意數(shù)量的參數(shù)塞赂,這點但從函數(shù)聲明的參數(shù)列表是看不出來的
  • 因為第一個參數(shù)是明明參數(shù)且已經(jīng)被使用,因此遍歷arguments對象時昼蛀,索引值并非從0開始宴猾,需要額外注意

使用rest參數(shù)重寫calculate()函數(shù)

function calculate(op, ...data) {
    if (op === "+") {
        let result = 0
        for (let i = 0; i < data.length; i++) {
            result += data[i]
        }
        return result
    } else if (op === "*") {
        let result = 1
        for (let i = 0; i < data.length; i++) {
            result *= data[i]
        }
        return result
    }
}

上述代碼中,rest參數(shù)data包含op之后傳入的所有參數(shù)叼旋,這種代碼結(jié)構(gòu)更加清晰
但是使用rest參數(shù)也有幾個需要注意的地方

  • 每個函數(shù)只能聲明一個rest參數(shù)
  • rest參數(shù)只能放在函數(shù)參數(shù)列表的最右側(cè)

展開運算符

展開運算符在語法上與rest參數(shù)相似仇哆,也是通過三個點(...)實現(xiàn)響應的功能,具體代碼如下:

使用展開運算符(...)提取數(shù)組元素傳入到函數(shù)中

function sum(a, b, c) {
    return a + b + c
}

let arr = [1, 2, 3]
sum(...arr)

使用展開運算符(...)復制數(shù)組

// 創(chuàng)建原始數(shù)組
let arr1 = [1, 2, 3]
// arr2與arr1是同一數(shù)組對象
let arr2 = arr1
// arr3與arr1是兩個不同的數(shù)組對象
let arr3 = [...arr1]

// 改變原始數(shù)組的值
arr1[0] = 4
// arr2中的元素也發(fā)生改變,輸出4
console.log(arr2[0])
// arr3中的元素不變夫植,輸出1
console.log(arr3[0])

使用展開運算符(...)合并數(shù)組

let arr1 = ['a']
let arr2 = ['b', 'c']
let arr3 = ['d', 'e']
// 輸出結(jié)果為“['a', 'b', 'c', 'd', 'e']”
console.log(...arr1, ...arr2, ...arr3)

使用展開運算符(...)取出對象的所有可遍歷屬性

let book = {
    title: "ECMAScript 6",
    price: 24
}

let bookDetail = {...book, desc: "a fine book"}
// 輸出結(jié)果為{title: 'ECMAScript 6'讹剔,price: 24,  desc: 'a fine book'}
console.log(bookDetail)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市偷崩,隨后出現(xiàn)的幾起案子辟拷,更是在濱河造成了極大的恐慌,老刑警劉巖阐斜,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衫冻,死亡現(xiàn)場離奇詭異,居然都是意外死亡谒出,警方通過查閱死者的電腦和手機隅俘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門邻奠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人为居,你說我怎么就攤上這事碌宴。” “怎么了蒙畴?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵贰镣,是天一觀的道長。 經(jīng)常有香客問我膳凝,道長碑隆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任蹬音,我火速辦了婚禮上煤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘著淆。我一直安慰自己劫狠,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布永部。 她就那樣靜靜地躺著独泞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扬舒。 梳的紋絲不亂的頭發(fā)上阐肤,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音讲坎,去河邊找鬼孕惜。 笑死,一個胖子當著我的面吹牛晨炕,可吹牛的內(nèi)容都是我干的衫画。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼瓮栗,長吁一口氣:“原來是場噩夢啊……” “哼削罩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起费奸,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弥激,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后愿阐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體微服,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年缨历,在試婚紗的時候發(fā)現(xiàn)自己被綠了以蕴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糙麦。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丛肮,靈堂內(nèi)的尸體忽然破棺而出赡磅,到底是詐尸還是另有隱情,我是刑警寧澤宝与,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布焚廊,位于F島的核電站,受9級特大地震影響伴鳖,放射性物質(zhì)發(fā)生泄漏节值。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一榜聂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嗓蘑,春花似錦须肆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泄隔,卻和暖如春拒贱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背佛嬉。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工逻澳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人暖呕。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓斜做,卻偏偏與公主長得像,于是被迫代替她去往敵國和親湾揽。 傳聞我的和親對象是個殘疾皇子瓤逼,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355