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

首頁 > 編程 > JavaScript > 正文

ES6基礎之解構賦值(destructuring assignment)

2019-11-19 12:05:19
字體:
來源:轉載
供稿:網友

我們經常可以在其他編程語言(如GO語言)中看到多返回值這種特性,因為在很多實際場景中,函數的返回值中,函數的返回值并不只有一個單一的值。ES6之前,并沒有可以直接使用語法來實現多返回值的特性。ES6終于出現了解構賦值的語法糖來解決此類問題。

解構賦值是一種表達式,允許您使用數組或對象,將可迭代對象的值或屬性分配給變量。解構賦值能讓我們用更簡短的語法進行多個變量的賦值,大大的減少了代碼量。解構表達式有兩種:array和object。

今天的文章筆者將從以下方面進行介紹:

  • 使用數組表達式解構賦值
    • 常規用法
    • 忽略數組中的某些值
    • 使用展開語法
    • 默認參數值
    • 嵌套數組解構
    • 作為函數參數
  • 使用對象表達式解構賦值
    • 常規用法
    • 默認參數值
    • 嵌套對象
    • 作為函數參數
  • 其他
    • 解構對象的方法
    • 獲取字符串長度
    • 拆分字符串
    • 交換變量
    • 遍歷Map結構
    • 加載指定模塊的方法
  • 常用場景介紹

使用數組表達式解構賦值

常規用法

如何將一個數組的值,賦值給多個變量?數組解構語法能讓我們快速的迭代數組的元素,并賦值給多個變量。

E6之前,我們可以這種形式將數組的內容賦值給多個變量:

var myArray = [1, 2, 3];var a = myArray[0];var b = myArray[1];var c = myArray[2];

ES6后,我們可以通過數組解構語法,在一行語句里完成上述操作。

let myArray = [1, 2, 3];let a, b, c;[a, b, c] = myArray; //array destructuring assignment syntax

上述代碼中,[a, b, c]就是解構表達式。在數組解構語句的左側就是需要進行賦值的多個變量,等號右側則是我們需要分配的值。

我們還可以讓上述代碼更短,你還可以這么寫,代碼如下:

let [a, b, c] = [1, 2, 3];

我們在同一行語句中創建變量,而不是分別創建。是不是更清爽。

如果左邊的數值少于右邊數組的項數,左邊變量的值只會和右邊數組的內容一一對應,多于的內容將會忽略。

忽略數組中某些值

如果只有兩個變量,我們數組內容有三項,我們想跳過數組中的第二項,我們如何使用數組解構賦值呢?代碼如下:

let [a, , b] = [1, 2, 3];console.log(a);console.log(b);

上述代碼我們使用, ,忽略數組中的第二項,建議中間有空格,方便我們閱讀。

使用展開語法

上篇文章 《【ES6基礎】展開語法(Spread syntax)》 ,筆者介紹了展開語法的幾個應用場景,由于上篇文章沒介紹解構賦值,所以在這里給大家介紹展開語法在解構賦值的應用。如下段代碼所示:

let [a, ...b] = [1, 2, 3, 4, 5, 6];console.log(a);console.log(Array.isArray(b));console.log(b);”

上述代碼則會輸出:

1
true
2,3,4,5,6

上述代碼,你可以看到b變量被解構賦值成數組,這里...就是我們上篇文章提到的剩余參數場景的運用。

如果想跳過數組中的部分值,我們可以這么做,如下段代碼所示:

let [a, , ,...b] = [1, 2, 3, 4, 5, 6];console.log(a);console.log(b);

上述代碼則會輸出:

1
4,5,6

這段代碼我們跳過了數組的第2項和第3項。

默認參數值

筆者在 《【ES6基礎】默認參數值》 給大家介紹了如何使用默認參數值,在解構賦值中,我們如何設置變量的默認值呢,如下段代碼所示:

let [a, b, c = 3] = [1, 2];console.log(c); //Output "3”

嵌套數組

我們還可以從多維數組中提取值并分配給變量,如下段代碼所示:

let [a, b, [c, d]] = [1, 2, [3, 4]];

作為函數參數

我們還可以使用數組解構表達式作為函數參數來提取可迭代數組的值,作為參數傳遞給函數參數,如下段代碼所示:

function myFunction([a, b, c = 3]) {   console.log(a, b, c); //Output "1 2 3"  }myFunction([1, 2]);

筆者在《【ES6基礎】默認參數值》 提及到我們可以傳遞undefined,指定某個具體的參數使用默認值,我們可以使用結構賦值為相關變量提供一組默認值,并傳入undefined,如下段代碼所示:

function myFunction([a, b, c = 3] = [1, 2, 3]) {   console.log(a, b, c); //Output "1 2 3"  }myFunction(undefined);

在這里,我們將undefined作為參數傳遞,因此使用默認數組[1,2,3]進行提取賦值。

使用對象表達式解構賦值

常規用法

對象解構賦值將對象屬性的值賦給多個變量。ES6之前我們可以這樣把對象的屬性賦值給多個變量,如下段代碼所示:

var object = {name : "John", age : 23};var name = object.name;var age = object.age;

在ES6里,我們可以使用對象解構表達式,在單行里給多個變量賦值,如下段代碼所示:

let object = {name : "John", age : 23};let name, age;({name, age} = object); //object destructuring assignment syntax

對象解構賦值的左側為解構賦值表達式,右側為對應要分配賦值的對象。解構語句的兩邊千萬 不要遺漏左右括號() ,否則會報錯。

還有一點需要格外注意,解構對象 變量的名稱一定要和右邊對象的屬性名稱保持一致 ,否則會提示變量的值為undefined。如果你想以其它的變量名進行命名,你可以這么做,如下段代碼所示:

let object = {name : "John", age : 23};let x, y;({name: x, age: y} = object);

上述代碼x,y為對應對象屬性的值John,23。如果你輸出name或age,編譯器則會提示ReferenceError: 變量 is not defined

我們可以讓代碼更短,如下段代碼所示:

let {name: x, age: y} = {name : "John", age : 23};

上述代碼由于聲明變量和解構賦值在同一行,因此對象解構語句兩邊無需左右括號()。

默認參數值

在解構對象針對未分配值的變量,我們可以為變量提供默認值,如下段代碼所示:

let {a, b, c = 3} = {a: "1", b: "2"};console.log(c); //Output "3”

在解構對象時變量名支持表達式計算,如下段代碼所示:

let {["first"+"Name"]: x} = { firstName: "Eden" };console.log(x); //Output "Eden”

嵌套對象

我們還可以從嵌套對象中提取屬性值,即對象中的對象。 如下段代碼所示:

let {name, otherInfo: {age}} = {name: "Eden", otherInfo: {age:23}};console.log(name, age); //Eden 23

作為函數參數

就像數組解構賦值一樣,我們也可以使用對象解構賦值作為函數參數,如下段代碼所示:

function myFunction({name = 'Eden', age = 23, profession ="Designer"} = {}){  console.log(name, age, profession); // Outputs "John 23 Designer"}myFunction({name: "John", age: 23});

在這里,我們傳遞一個空對象作為默認參數值,如果將undefined作為函數參數傳遞,變量將使用默認值。

其他

解構對象的方法

比如結構Math對象的方法,如下段代碼所示:

let {floor,pow}=Math;//把Math里的方法提取出來變成一個變量let a=1.1;console.log(floor(a));//1console.log(pow(2,3));//8

獲取字符串的長度

var {length}='lxy';console.log(length);//3

拆分字符串

var [a,b,c,d]='前端達人';console.log(a,b,c,d) // 輸出:前 端 達 人

交換變量

let x = 1;let y = 2;[x, y] = [y, x];

遍歷Map結構

var map = new Map();map.set('first', 'hello');map.set('second', 'world');for (let [key, value] of map) {  console.log(key + " is " + value);}

加載指定模塊的方法

const { SourceMapConsumer, SourceNode } = require("source-map");

常用場景介紹

比如我們經常與后端API接口做數據交互,我們需要處理返回的JSON對象,使用解構方式大大簡化了我們的代碼,如下段代碼所示:

let jsonData = {  id: 42,  status: "OK",  data: [867, 5309]};let { id, status, data: number } = jsonData;console.log(id, status, number);// 42, "OK", [867, 5309]

小節

今天的內容有些多,想必大家對解構賦值有了全面的認識吧,使用解構賦值是不是很強大,大大簡化了我們的代碼量,雖然優勢蠻多,但是增加對代碼的理解難度,我們只有在實踐中不斷的運用,來加深我們對解構賦值的認識。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩在线播放| 91亚洲精品久久久| 91久久在线视频| 国产精品久久久亚洲| 欧美性猛交xxxx免费看漫画| 精品久久久av| 久久久久久久av| 91在线观看欧美日韩| 国产精品入口日韩视频大尺度| 亚洲午夜久久久影院| 国产一区二区黑人欧美xxxx| 日韩性生活视频| 欧美性猛交丰臀xxxxx网站| 日韩有码在线电影| 美乳少妇欧美精品| 国产综合在线观看视频| 成人欧美在线视频| 精品久久久久久久久久久久久久| 欧美日韩中文字幕在线| 91精品久久久久久久久| 在线a欧美视频| 77777少妇光屁股久久一区| 一区二区在线视频| 久久久精品久久久| 日韩av在线网站| 国产精品成人免费视频| 777国产偷窥盗摄精品视频| 国产精品日韩在线| 久久久久久国产三级电影| 日韩免费视频在线观看| 国产精品视频久久久| 久久99久久99精品免观看粉嫩| 成人久久18免费网站图片| 国产精品白嫩初高中害羞小美女| 亚洲精品美女网站| 日韩av在线资源| 亚洲人在线观看| 久久精彩免费视频| 日韩欧美亚洲成人| 精品国内亚洲在观看18黄| 日韩小视频在线观看| 97在线视频一区| 色综合男人天堂| 日韩电影大全免费观看2023年上| 91精品国产自产在线观看永久| 欧美性在线视频| 国产成人精品久久久| 欧美激情综合亚洲一二区| 亚洲精品www久久久久久广东| 国产亚洲aⅴaaaaaa毛片| 欧美电影《睫毛膏》| 一区二区国产精品视频| 久久久精品欧美| 日韩一区二区av| 国产精品露脸av在线| 欧美日韩高清区| 深夜福利亚洲导航| 国产丝袜一区视频在线观看| 国产精品久久久av久久久| 性色av一区二区三区在线观看| 国产va免费精品高清在线| 91亚洲一区精品| 欧美日韩激情视频| 日本久久久久久久久| 欧美视频专区一二在线观看| 精品久久久视频| 日本一区二区在线免费播放| 欧美国产日产韩国视频| 最近2019年好看中文字幕视频| 久久久日本电影| 久久久久久久影视| 中文字幕亚洲欧美日韩2019| 国产视频丨精品|在线观看| 日韩在线观看免费高清完整版| 欧美另类在线播放| 久久久伊人日本| 国产一区二区黑人欧美xxxx| 成人免费在线网址| 欧美电影在线观看网站| 91九色国产在线| 综合激情国产一区| 色综合久久中文字幕综合网小说| 国产精品三级久久久久久电影| 亚洲bt欧美bt日本bt| 久久久久久久久久久网站| 不卡中文字幕av| 色婷婷综合成人| 欧美在线观看一区二区三区| 国产999精品久久久影片官网| 久久全国免费视频| 久久久噜噜噜久久久| 精品久久久91| 成人字幕网zmw| 亚洲欧美制服另类日韩| 精品中文字幕在线2019| 久久久精品亚洲| 日韩免费在线免费观看| 国产欧美日韩精品在线观看| 国产乱肥老妇国产一区二| 欧美成人免费一级人片100| 亚洲精品视频二区| 亚洲美腿欧美激情另类| 欧美交受高潮1| 91精品国产综合久久久久久久久| 91在线视频精品| 欧美中文字幕视频| 精品久久香蕉国产线看观看gif| 2020国产精品视频| 欧美日韩性生活视频| 美女撒尿一区二区三区| 亚洲图片欧美日产| 欧美激情一区二区三级高清视频| 亚洲2020天天堂在线观看| 国产精品欧美日韩一区二区| 日韩在线视频中文字幕| 日韩电影大片中文字幕| 久久综合久久88| 国产日韩欧美中文| 中文字幕在线亚洲| 色悠悠久久久久| 色中色综合影院手机版在线观看| 日韩av在线免费看| 亚洲第一天堂av| 亚洲国产99精品国自产| 中文字幕亚洲专区| 不卡av在线网站| 欧美日韩国内自拍| 国产成人精品一区| 国产精品视频一区国模私拍| 日本精品免费观看| 亚洲女同精品视频| 日韩美女在线播放| 国产成人aa精品一区在线播放| 日韩大片在线观看视频| 欧美日韩一区二区精品| 中文字幕国内精品| 成人看片人aa| 欧美日韩中文字幕日韩欧美| 免费不卡在线观看av| 欧美激情综合色综合啪啪五月| 青青草原成人在线视频| 久久香蕉国产线看观看av| 欧美激情视频给我| 国产视频久久久久| 91精品国产九九九久久久亚洲| 不卡av日日日| 这里只有精品丝袜| 亚洲黄色av女优在线观看| 国产精品丝袜视频| 欧美性猛交xxxx富婆弯腰| 亚洲欧洲第一视频| 久久天天躁夜夜躁狠狠躁2022| 91精品视频在线| 亚洲片国产一区一级在线观看| 亚洲老头老太hd| 亚洲偷熟乱区亚洲香蕉av| 欧美激情在线有限公司| 最新国产成人av网站网址麻豆| 亚洲精品成人av| 欧美大尺度电影在线观看| 亚洲国产精品悠悠久久琪琪| 一本色道久久88综合日韩精品| 成人免费网站在线看| 久久久精品免费|