一篇文章帶你了解JavaScript的解構(gòu)賦值
1. 什么是解構(gòu)賦值 ?
將屬性/值從對(duì)象/數(shù)組中取出,賦值給其他變量
通俗來說,即解析某一數(shù)據(jù)的結(jié)構(gòu),將我們想要的東西提取出來,賦值給變量或常量。
讓我們通過一個(gè)例子看看:
const [a, b, c] = [1, 2, 3]; console.log(a, b, c);
將數(shù)組的值獲取出來,賦值給a
, b
, c
2. 數(shù)組的解構(gòu)賦值
模式(結(jié)構(gòu))匹配
即左邊與右邊的結(jié)構(gòu)相同 (如左邊是數(shù)組,右邊也要是數(shù)組)
索引值相同的完成賦值
即左邊與右邊的索引值相同的完成賦值
通過例子來理解一下:
對(duì)于第一個(gè):
let [e, [ , , f], g] = [1, [2, 4, 5], 3]; // 可以正確輸出 console.log(e, f, g);
但是如果寫成這樣,則會(huì)報(bào)錯(cuò)。
let [e, [ , , f], [g]] = [1, [2, 4, 5], 3]; console.log(e, f, g);
因?yàn)樽筮吪c右邊的結(jié)構(gòu)不匹配,右邊索引為 2 的地方是個(gè) 3,而左邊是個(gè)數(shù)組,無法完成匹配。
對(duì)于第二個(gè)
let [, a, ] = [1, 2, 3]; console.log(a);
索引值相同的完成賦值,a
的索引值是 1,對(duì)應(yīng)右邊索引值為 1 的值是 2,所以a = 2
。
2.1) 數(shù)組解構(gòu)賦值的默認(rèn)值
const [a, b] = [];console.log(a, b);
當(dāng)左邊對(duì)應(yīng)的索引在右邊為undefined
時(shí)(如右邊不存在這個(gè)值的情況),此時(shí)賦值的是undefined
那我們?nèi)绾涡薷倪@個(gè)賦值呢 ?
通過在左邊給變量寫個(gè) = 想要的值,即默認(rèn)值。
所以,當(dāng)左邊的值=== undefined
時(shí),如果有默認(rèn)值,左邊的值會(huì)等于默認(rèn)值
const [a = 1, b = 2] = []; console.log(a, b);
2.2) 數(shù)組解構(gòu)賦值的應(yīng)用
類數(shù)組中的應(yīng)用
比如arguments
中的應(yīng)用
將arguments
中的值提取出來
function fun() { const [a, b, c] = arguments; console.log(a, b); } fun(1, 2, 3, 4);
比如NodeList
中的應(yīng)用
在這里,將p
元素提取出來
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>解構(gòu)賦值的應(yīng)用</title> </head> <body> <p>one</p> <p>two</p> <p>three</p> <script> // 利用數(shù)組解構(gòu)賦值將 p 元素獲取的同時(shí)解構(gòu)出來 const [p1, p2, p3] = document.querySelectorAll('p'); console.log(p1, p2, p3); </script> </body> </html>
交換變量的值
let a = 1, b = 2; [a, b] = [b, a]; // 相當(dāng)于 [a, b] = [2, 1]; console.log(a, b);
3. 對(duì)象的解構(gòu)賦值
模式(結(jié)構(gòu))匹配
即左邊與右邊的結(jié)構(gòu)相同 (如左邊是對(duì)象,右邊也要是對(duì)象)
屬性名相同的完成賦值
即左邊與右邊的屬性名相同的完成賦值
通過例子來理解一下:
const {val, objName} = {objName: "object", val: 1}; console.log(objName, val);
屬性名相同的完成賦值,不用管左邊屬性名出現(xiàn)的順序是否與右邊出現(xiàn)的順序一致。
這里還可以這么寫,給新的變量名賦值:
const {val: vvv, objName: objnnn} = {objName: "object", val: 1}; console.log(objnnn, vvv);
3.1) 對(duì)象解構(gòu)賦值的默認(rèn)值
與數(shù)組解構(gòu)賦值類似
對(duì)象的屬性值=== undefined
時(shí),如果有默認(rèn)值,等于對(duì)應(yīng)的默認(rèn)值
const {age: val = 18} = {}; console.log(val);
3.2)對(duì)一個(gè)已聲明的變量解構(gòu)賦值
在數(shù)組中,我們可以直接這么寫:
let a, b; [a, b] = [1, 2]; console.log(a, b);
但是,在對(duì)象中,直接這么寫則會(huì)報(bào)錯(cuò)
let a, b; {a, b} = {a: 1, b: 2}; console.log(a, b);
因?yàn)樵谶@里,左邊的花括號(hào),瀏覽器會(huì)把它當(dāng)成是一個(gè)代碼塊。
那么,我們?nèi)绾谓鉀Q這個(gè)問題呢 ?
在外面加個(gè)圓括號(hào)
let a, b; ({a, b} = {a: 1, b: 2}); console.log(a, b);
除此之外,對(duì)象的解構(gòu)賦值可以取到繼承的屬性!
4. 字符串的解構(gòu)賦值
可以用數(shù)組和對(duì)象的形式進(jìn)行結(jié)構(gòu)賦值
const [a, b] = "Hello"; // 左邊對(duì)象的屬性名對(duì)應(yīng)右邊字符串的字符下標(biāo)序號(hào) const {2: c, 4: e} = "Hello"; console.log(a, b, c, e);
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
瀏覽器解析js生成的html出現(xiàn)樣式問題的解決方法
接觸css, javascript有三年多了,今天遇到的問題最令我不可思議,很容易給人一種錯(cuò)覺,那就是js拼成的html結(jié)構(gòu)肯定有問題2012-04-04JavaScript登錄記住密碼操作(超簡(jiǎn)單代碼)
本文給大家分享一段簡(jiǎn)單的js代碼實(shí)現(xiàn)用戶登錄記住密碼操作,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-03-03javascript正則表達(dá)式中參數(shù)g(全局)的作用
表達(dá)式加上參數(shù)g之后,表明可以進(jìn)行全局匹配,注意這里可以的含義。2010-11-11一文教你實(shí)現(xiàn)JavaScript防抖優(yōu)化代碼
在我們前端編程中,假如我們要給后端發(fā)送請(qǐng)求,萬一手抖多點(diǎn)了幾次,多發(fā)送了幾遍怎么辦,那就得用防抖處理,下面小編就來教大家如何實(shí)現(xiàn)防抖吧2023-11-11怎么理解wx.navigateTo的events參數(shù)使用詳情
這篇文章主要介紹了怎么理解wx.navigateTo的events參數(shù)使用詳情,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05JS實(shí)現(xiàn)橫向拉伸動(dòng)感伸縮菜單效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)橫向拉伸動(dòng)感伸縮菜單效果,涉及javascript基于定時(shí)函數(shù)及鼠標(biāo)事件操作頁面元素動(dòng)態(tài)變換的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09JS實(shí)現(xiàn)隨機(jī)生成10個(gè)手機(jī)號(hào)的方法示例
這篇文章主要介紹了JS實(shí)現(xiàn)隨機(jī)生成10個(gè)手機(jī)號(hào)的方法,涉及javascript數(shù)值運(yùn)算與隨機(jī)數(shù)操作相關(guān)使用技巧,需要的朋友可以參考下2018-12-12