聊聊ES6擴(kuò)展運(yùn)算符“…”的8種用法(轉(zhuǎn)載)

image

擴(kuò)展操作符 是ES6中引入的,將可迭代對(duì)象展開(kāi)到其單獨(dú)的元素中眉孩,所謂的可迭代對(duì)象就是任何能用for of循環(huán)進(jìn)行遍歷的對(duì)象个绍,例如:數(shù)組字符串浪汪、Map 巴柿、Set 、DOM節(jié)點(diǎn)等吟宦。

1. 拷貝數(shù)組對(duì)象

使用擴(kuò)展符拷貝數(shù)組是ES6中常用的操作:

const years = [2018, 2019, 2020, 2021];
const copyYears = [...years];

console.log(copyYears); // [ 2018, 2019, 2020, 2021 ]

擴(kuò)展運(yùn)算符拷貝數(shù)組,只有第一層是深拷貝涩维,即對(duì)一維數(shù)組使用擴(kuò)展運(yùn)算符拷貝就屬于深拷貝殃姓,看下面的代碼:

const miniCalendar = [2021, [1, 2, 3, 4, 5, 6, 7], 1];

const copyArray = [...miniCalendar];
console.log(copyArray); // [ 2021, [ 1, 2, 3, 4, 5, 6, 7 ], 1 ]

copyArray[1][0] = 0;
copyArray[1].push(8);
copyArray[2] = 2;
console.log(copyArray); // [ 2021, [ 0, 2, 3, 4, 5, 6, 7, 8 ], 2 ]
console.log(miniCalendar); // [ 2021, [ 0, 2, 3, 4, 5, 6, 7, 8 ], 1 ]

把打印的結(jié)果放在一起便于更加清楚進(jìn)行對(duì)比,如下:

變量說(shuō)明 結(jié)果 操作
copyArray [ 2021, [ 1, 2, 3, 4, 5, 6, 7 ], 1 ] 復(fù)制數(shù)組 miniCalendar
copyArray [ 2021, [ 0, 2, 3, 4, 5, 6, 7, 8 ], 2 ] 1. 將數(shù)組第二個(gè)元素的第一個(gè)元素重新賦值為 0 瓦阐;2. 往數(shù)組的第二個(gè)元素增加一個(gè)元素 8 蜗侈;3. 將數(shù)組第三個(gè)元素重新賦值為2
miniCalendar [ 2021, [ 0, 2, 3, 4, 5, 6, 7, 8 ], 1 ] 從結(jié)果來(lái)看,數(shù)組的第二個(gè)元素為數(shù)組睡蟋,大于1維了踏幻,里面的元素的變更將導(dǎo)致原變量的值隨之改變

拷貝對(duì)象,代碼如下:

const time = {
    year: 2021,
    month: 7,
    day: {
        value: 1,
    },
};
const copyTime = { ...time };
console.log(copyTime); // { year: 2021, month: 7, day: { value: 1 } }

擴(kuò)展運(yùn)算符拷貝對(duì)象只會(huì)在一層進(jìn)行深拷貝戳杀,從下面代碼是基于上面代碼:

copyTime.day.value = 2;
copyTime.month = 6;
console.log(copyTime); // { year: 2021, month: 6, day: { value: 2 } }
console.log(time); // { year: 2021, month: 7, day: { value: 2 } }

從打印的結(jié)果看该面,擴(kuò)展運(yùn)算符只對(duì)對(duì)象第一層進(jìn)行了深拷貝。

嚴(yán)格來(lái)講信卡,擴(kuò)展運(yùn)算符不執(zhí)行深拷貝

2. 合并操作

先來(lái)看數(shù)組的合并隔缀,如下:

const halfMonths1 = [1, 2, 3, 4, 5, 6];
const halfMonths2 = [7, 8, 9, 10, 11, 12];

const allMonths = [...halfMonths1, ...halfMonths2];
console.log(allMonths); // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]

合并對(duì)象,在合并對(duì)象時(shí)傍菇,如果一個(gè)鍵已經(jīng)存在猾瘸,它會(huì)被具有相同鍵的最后一個(gè)對(duì)象給替換。

const time1 = {
    month: 7,
    day: {
        value: 1,
    },
};
const time2 = {
    year: 2021,
    month: 8,
    day: {
        value: 10,
    },
};
const time = { ...time1, ...time2 };
console.log(time); // { month: 8, day: { value: 10 }, year: 2021 }

3. 參數(shù)傳遞

const sum = (num1, num2) => num1 + num2;

console.log(sum(...[6, 7])); // 13
console.log(sum(...[6, 7, 8])); // 13

從上面的代碼看丢习,函數(shù)定義了多少個(gè)參數(shù)牵触,擴(kuò)展運(yùn)算符傳入的值就是多少個(gè)。

math 函數(shù)一起使用咐低,如下:

const arrayNumbers = [1, 5, 9, 3, 5, 7, 10];
const min = Math.min(...arrayNumbers);
const max = Math.max(...arrayNumbers);
console.log(min); // 1
console.log(max); // 10

4. 數(shù)組去重

Set 一起使用消除數(shù)組的重復(fù)項(xiàng)揽思,如下:

const arrayNumbers = [1, 5, 9, 3, 5, 7, 10, 4, 5, 2, 5];
const newNumbers = [...new Set(arrayNumbers)];
console.log(newNumbers); // [ 1,  5, 9, 3, 7, 10, 4, 2 ]

5. 字符串轉(zhuǎn)字符數(shù)組

String 也是一個(gè)可迭代對(duì)象,所以也可以使用擴(kuò)展運(yùn)算符 ... 將其轉(zhuǎn)為字符數(shù)組见擦,如下:

const title = "china";
const charts = [...title];
console.log(charts); // [ 'c', 'h', 'i', 'n', 'a' ]

進(jìn)而可以簡(jiǎn)單進(jìn)行字符串截取绰更,如下:

const title = "china";
const short = [...title];
short.length = 2;
console.log(short.join("")); // ch

6. NodeList 轉(zhuǎn)數(shù)組

NodeList 對(duì)象是節(jié)點(diǎn)的集合瞧挤,通常是由屬性,如 Node.childNodes 和方法儡湾,如 document.querySelectorAll 返回的特恬。

NodeList 類似于數(shù)組,但不是數(shù)組徐钠,沒(méi)有 Array 的所有方法癌刽,例如findmap尝丐、filter 等显拜,但是可以使用 forEach() 來(lái)迭代。

可以通過(guò)擴(kuò)展運(yùn)算符將其轉(zhuǎn)為數(shù)組爹袁,如下:

const nodeList = document.querySelectorAll(".row");
const nodeArray = [...nodeList];
console.log(nodeList);
console.log(nodeArray);
1.jpg

7. 解構(gòu)變量

解構(gòu)數(shù)組远荠,如下:

const [currentMonth, ...others] = [7, 8, 9, 10, 11, 12];
console.log(currentMonth); // 7
console.log(others); // [ 8, 9, 10, 11, 12 ]

解構(gòu)對(duì)象,如下:

const userInfo = { name: "Crayon", province: "Guangdong", city: "Shenzhen" };
const { name, ...location } = userInfo;
console.log(name); // Crayon
console.log(location); // { province: 'Guangdong', city: 'Shenzhen' }

8. 打印日志

在打印可迭代對(duì)象的時(shí)候失息,需要打印每一項(xiàng)可以使用擴(kuò)展符譬淳,如下:

const years = [2018, 2019, 2020, 2021];
console.log(...years); // 2018 2019 2020 2021

總結(jié)

擴(kuò)展運(yùn)算符 讓代碼變得簡(jiǎn)潔,應(yīng)該是ES6中比較受歡迎的操作符了盹兢。

原文地址:https://juejin.cn/post/6979840705921286180

本文轉(zhuǎn)載自:https://www.php.cn/js-tutorial-479781.html

更多編程相關(guān)知識(shí)邻梆,請(qǐng)?jiān)L問(wèn):編程入門!绎秒!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浦妄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子见芹,更是在濱河造成了極大的恐慌剂娄,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玄呛,死亡現(xiàn)場(chǎng)離奇詭異宜咒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)把鉴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門故黑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人庭砍,你說(shuō)我怎么就攤上這事场晶。” “怎么了怠缸?”我有些...
    開(kāi)封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵诗轻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我揭北,道長(zhǎng)扳炬,這世上最難降的妖魔是什么吏颖? 我笑而不...
    開(kāi)封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮恨樟,結(jié)果婚禮上半醉,老公的妹妹穿的比我還像新娘。我一直安慰自己劝术,他們只是感情好缩多,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著养晋,像睡著了一般衬吆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绳泉,一...
    開(kāi)封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天逊抡,我揣著相機(jī)與錄音,去河邊找鬼零酪。 笑死冒嫡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛾娶。 我是一名探鬼主播灯谣,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼潜秋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蛔琅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起峻呛,我...
    開(kāi)封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤罗售,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后钩述,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寨躁,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年牙勘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了职恳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡方面,死狀恐怖放钦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恭金,我是刑警寧澤操禀,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站横腿,受9級(jí)特大地震影響颓屑,放射性物質(zhì)發(fā)生泄漏斤寂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一揪惦、第九天 我趴在偏房一處隱蔽的房頂上張望遍搞。 院中可真熱鬧,春花似錦丹擎、人聲如沸尾抑。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)再愈。三九已至,卻和暖如春护戳,著一層夾襖步出監(jiān)牢的瞬間翎冲,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工媳荒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抗悍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓钳枕,卻偏偏與公主長(zhǎng)得像缴渊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鱼炒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345