JavaScript中展開(kāi)運(yùn)算符及應(yīng)用的實(shí)例代碼
展開(kāi)運(yùn)算符(spread operator)允許一個(gè)表達(dá)式在某處展開(kāi)。展開(kāi)運(yùn)算符在多個(gè)參數(shù)(用于函數(shù)調(diào)用)或多個(gè)元素(用于數(shù)組字面量)或者多個(gè)變量(用于解構(gòu)賦值)的地方可以使用。
let obj1 = { value1: 1, value2: 2 }; let obj2 = {...obj1 }; console.log(obj2); // {value1: 1, value2: 2}
上面的用法實(shí)際相當(dāng)于
obj2 = {value1: 1, value2: 2}
展開(kāi)運(yùn)算符的寫(xiě)法與obj2 = obj1
直接賦值的寫(xiě)法的區(qū)別在于如果直接賦值的話,對(duì)于引用類(lèi)型
來(lái)說(shuō),相當(dāng)于只是賦值了obj1
的內(nèi)存空間地址,當(dāng)obj2
發(fā)生改變的時(shí)候,obj1
也會(huì)隨著發(fā)生改變。而是用展開(kāi)運(yùn)算符
寫(xiě)法的話,由于obj1
對(duì)象中的屬性類(lèi)型都是基本類(lèi)型
,相當(dāng)于重新創(chuàng)建了一個(gè)對(duì)象,此時(shí)obj2
發(fā)生改變的時(shí)候,并不會(huì)影響obj1
這個(gè)對(duì)象。但是僅限于其屬性都為基本類(lèi)型的情況(或者說(shuō)只進(jìn)行了一層的深拷貝)。如果該對(duì)象中的屬性還有引用類(lèi)型的話,修改屬性中引用類(lèi)型的值,則兩個(gè)對(duì)象的屬性值都會(huì)被修改。
let obj1 = { attri1: [3, 6, 0], attri2: 4, attri4: 5 }; let obj2 = {...obj1 }; obj2.attri2 = 888; obj2.attri1[0] = 7; console.log('obj1:', obj1); console.log('obj2:', obj2);
展開(kāi)運(yùn)算符的應(yīng)用
1.在函數(shù)中使用展開(kāi)運(yùn)算符
function test(a, b, c){}; let arr = [1, 2, 3]; test(...arr);
2.數(shù)組字面量中使用展開(kāi)運(yùn)算符
let arr1 = [1, 2]; let arr2 = [...arr1, 3, 4]; // [1, 2, 3, 4] // 使用push方法 let arr1 = [1, 2]; let arr2 = [3. 4]; arr1.push(...arr2); // [1, 2, 3, 4]
3.用于解構(gòu)賦值,解構(gòu)賦值中展開(kāi)運(yùn)算符只能用在最后,否則會(huì)報(bào)錯(cuò)。
// 解構(gòu)賦值中展開(kāi)運(yùn)算符只能用在最后。 let [a, b, ...c] = [1, ,2, 3, 4] console.log(a, b, c) // 1, 2, [3, 4]
4.類(lèi)數(shù)組變成數(shù)組
let oLis = document.getElementsByTagName("li"); let liArr = [...oLis];
5.對(duì)象中使用展開(kāi)運(yùn)算符
ES7中的對(duì)象展開(kāi)運(yùn)算符符可以讓我們更快捷地操作對(duì)象:
let {x,y,...z}={x:1,y:2,a:3,b:4}; x; // 1 y; // 2 z; // {a:3,b:4}
將一個(gè)對(duì)象插入另外一個(gè)對(duì)象當(dāng)中:
let z={a:3,b:4}; let n={x:1,y:2,...z}; console.log(n); //{x:1,y:2,a:3,b:4}
合并兩個(gè)對(duì)象:
let a={x:1,y:2}; let b={z:3}; let ab={...a,...b}; console.log(ab); // {x:1,y:2,z:3}
到此這篇關(guān)于JavaScript中展開(kāi)運(yùn)算符及應(yīng)用的實(shí)例代碼的文章就介紹到這了,更多相關(guān)js展開(kāi)運(yùn)算符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用window.onerror捕獲并上報(bào)Js錯(cuò)誤的方法
這篇文章主要介紹了用window.onerror捕獲并上報(bào)Js錯(cuò)誤的方法,需要的朋友可以參考下2016-01-01javascrpt密碼強(qiáng)度校驗(yàn)函數(shù)詳解
這篇文章主要為大家詳細(xì)介紹了javascrpt密碼強(qiáng)度校驗(yàn)函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03javascript使用Promise對(duì)象實(shí)現(xiàn)異步編程
這篇文章主要介紹了javascript使用Promise對(duì)象實(shí)現(xiàn)異步編程的相關(guān)資料,需要的朋友可以參考下2016-03-03JS簡(jiǎn)單設(shè)置下拉選擇框默認(rèn)值的方法
這篇文章主要介紹了JS簡(jiǎn)單設(shè)置下拉選擇框默認(rèn)值的方法,涉及javascript針對(duì)頁(yè)面元素的遍歷、查找及設(shè)置技巧,需要的朋友可以參考下2016-08-08JS變量中有var定義和無(wú)var定義的區(qū)別以及es6中l(wèi)et命令和const命令
這篇文章主要介紹了JS變量中有var定義和無(wú)var定義的區(qū)別以及es6中l(wèi)et命令和const命令,需要的朋友可以參考下2017-02-02JavaScript內(nèi)置對(duì)象math,global功能與用法實(shí)例分析
這篇文章主要介紹了JavaScript內(nèi)置對(duì)象math,global功能與用法,結(jié)合實(shí)例形式分析了javascript中內(nèi)置對(duì)象math與global的基本概念、功能及使用方法,需要的朋友可以參考下2019-06-06ant-design-pro?的EditableProTable表格驗(yàn)證調(diào)用的實(shí)現(xiàn)代碼
這篇文章主要介紹了ant-design-pro?的EditableProTable表格驗(yàn)證調(diào)用,這里的需求是點(diǎn)擊外部的保存要對(duì)整個(gè)表單進(jìn)行驗(yàn)證,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06