最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ES6基礎(chǔ)之解構(gòu)賦值(destructuring assignment)

 更新時(shí)間:2019年02月21日 10:47:06   作者:前端達(dá)人  
這篇文章主要介紹了ES6基礎(chǔ)之解構(gòu)賦值(destructuring assignment),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

我們經(jīng)常可以在其他編程語言(如GO語言)中看到多返回值這種特性,因?yàn)樵诤芏鄬?shí)際場景中,函數(shù)的返回值中,函數(shù)的返回值并不只有一個(gè)單一的值。ES6之前,并沒有可以直接使用語法來實(shí)現(xiàn)多返回值的特性。ES6終于出現(xiàn)了解構(gòu)賦值的語法糖來解決此類問題。

解構(gòu)賦值是一種表達(dá)式,允許您使用數(shù)組或?qū)ο?,將可迭代?duì)象的值或?qū)傩苑峙浣o變量。解構(gòu)賦值能讓我們用更簡短的語法進(jìn)行多個(gè)變量的賦值,大大的減少了代碼量。解構(gòu)表達(dá)式有兩種:array和object。

今天的文章筆者將從以下方面進(jìn)行介紹:

  • 使用數(shù)組表達(dá)式解構(gòu)賦值
    • 常規(guī)用法
    • 忽略數(shù)組中的某些值
    • 使用展開語法
    • 默認(rèn)參數(shù)值
    • 嵌套數(shù)組解構(gòu)
    • 作為函數(shù)參數(shù)
  • 使用對(duì)象表達(dá)式解構(gòu)賦值
    • 常規(guī)用法
    • 默認(rèn)參數(shù)值
    • 嵌套對(duì)象
    • 作為函數(shù)參數(shù)
  • 其他
    • 解構(gòu)對(duì)象的方法
    • 獲取字符串長度
    • 拆分字符串
    • 交換變量
    • 遍歷Map結(jié)構(gòu)
    • 加載指定模塊的方法
  • 常用場景介紹

使用數(shù)組表達(dá)式解構(gòu)賦值

常規(guī)用法

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

E6之前,我們可以這種形式將數(shù)組的內(nèi)容賦值給多個(gè)變量:

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

ES6后,我們可以通過數(shù)組解構(gòu)語法,在一行語句里完成上述操作。

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

上述代碼中,[a, b, c]就是解構(gòu)表達(dá)式。在數(shù)組解構(gòu)語句的左側(cè)就是需要進(jìn)行賦值的多個(gè)變量,等號(hào)右側(cè)則是我們需要分配的值。

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

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

我們?cè)谕恍姓Z句中創(chuàng)建變量,而不是分別創(chuàng)建。是不是更清爽。

如果左邊的數(shù)值少于右邊數(shù)組的項(xiàng)數(shù),左邊變量的值只會(huì)和右邊數(shù)組的內(nèi)容一一對(duì)應(yīng),多于的內(nèi)容將會(huì)忽略。

忽略數(shù)組中某些值

如果只有兩個(gè)變量,我們數(shù)組內(nèi)容有三項(xiàng),我們想跳過數(shù)組中的第二項(xiàng),我們?nèi)绾问褂脭?shù)組解構(gòu)賦值呢?代碼如下:

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

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

使用展開語法

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

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

上述代碼則會(huì)輸出:

1
true
2,3,4,5,6

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

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

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

上述代碼則會(huì)輸出:

1
4,5,6

這段代碼我們跳過了數(shù)組的第2項(xiàng)和第3項(xiàng)。

默認(rèn)參數(shù)值

筆者在 《【ES6基礎(chǔ)】默認(rèn)參數(shù)值》 給大家介紹了如何使用默認(rèn)參數(shù)值,在解構(gòu)賦值中,我們?nèi)绾卧O(shè)置變量的默認(rèn)值呢,如下段代碼所示:

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

嵌套數(shù)組

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

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

作為函數(shù)參數(shù)

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

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

筆者在《【ES6基礎(chǔ)】默認(rèn)參數(shù)值》 提及到我們可以傳遞undefined,指定某個(gè)具體的參數(shù)使用默認(rèn)值,我們可以使用結(jié)構(gòu)賦值為相關(guān)變量提供一組默認(rèn)值,并傳入undefined,如下段代碼所示:

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

在這里,我們將undefined作為參數(shù)傳遞,因此使用默認(rèn)數(shù)組[1,2,3]進(jìn)行提取賦值。

使用對(duì)象表達(dá)式解構(gòu)賦值

常規(guī)用法

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

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

在ES6里,我們可以使用對(duì)象解構(gòu)表達(dá)式,在單行里給多個(gè)變量賦值,如下段代碼所示:

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

對(duì)象解構(gòu)賦值的左側(cè)為解構(gòu)賦值表達(dá)式,右側(cè)為對(duì)應(yīng)要分配賦值的對(duì)象。解構(gòu)語句的兩邊千萬 不要遺漏左右括號(hào)() ,否則會(huì)報(bào)錯(cuò)。

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

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

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

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

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

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

默認(rèn)參數(shù)值

在解構(gòu)對(duì)象針對(duì)未分配值的變量,我們可以為變量提供默認(rèn)值,如下段代碼所示:

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

在解構(gòu)對(duì)象時(shí)變量名支持表達(dá)式計(jì)算,如下段代碼所示:

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

嵌套對(duì)象

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

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

作為函數(shù)參數(shù)

就像數(shù)組解構(gòu)賦值一樣,我們也可以使用對(duì)象解構(gòu)賦值作為函數(shù)參數(shù),如下段代碼所示:

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

在這里,我們傳遞一個(gè)空對(duì)象作為默認(rèn)參數(shù)值,如果將undefined作為函數(shù)參數(shù)傳遞,變量將使用默認(rèn)值。

其他

解構(gòu)對(duì)象的方法

比如結(jié)構(gòu)Math對(duì)象的方法,如下段代碼所示:

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

獲取字符串的長度

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

拆分字符串

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

交換變量

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

遍歷Map結(jié)構(gòu)

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");

常用場景介紹

比如我們經(jīng)常與后端API接口做數(shù)據(jù)交互,我們需要處理返回的JSON對(duì)象,使用解構(gòu)方式大大簡化了我們的代碼,如下段代碼所示:

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

小節(jié)

今天的內(nèi)容有些多,想必大家對(duì)解構(gòu)賦值有了全面的認(rèn)識(shí)吧,使用解構(gòu)賦值是不是很強(qiáng)大,大大簡化了我們的代碼量,雖然優(yōu)勢蠻多,但是增加對(duì)代碼的理解難度,我們只有在實(shí)踐中不斷的運(yùn)用,來加深我們對(duì)解構(gòu)賦值的認(rèn)識(shí)。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • layui導(dǎo)航欄二級(jí)菜單不顯示問題及解決

    layui導(dǎo)航欄二級(jí)菜單不顯示問題及解決

    這篇文章主要介紹了layui導(dǎo)航欄二級(jí)菜單不顯示問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • canvas雪花效果核心代碼分享

    canvas雪花效果核心代碼分享

    本文主要分享了canvas實(shí)現(xiàn)雪花效果的核心代碼,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • 微信小程序點(diǎn)擊view動(dòng)態(tài)添加樣式過程解析

    微信小程序點(diǎn)擊view動(dòng)態(tài)添加樣式過程解析

    這篇文章主要介紹了微信小程序點(diǎn)擊view動(dòng)態(tài)添加樣式過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 那些項(xiàng)目中常見的TypeScript錯(cuò)誤總結(jié)

    那些項(xiàng)目中常見的TypeScript錯(cuò)誤總結(jié)

    這篇文章主要給大家總結(jié)介紹了一些項(xiàng)目中常見的TypeScript錯(cuò)誤的相關(guān)資料,如果你想查看所有的錯(cuò)誤信息和錯(cuò)誤碼,可以瀏覽TypeScript的源代碼倉庫,當(dāng)然隨著?ts?版本的更新,官網(wǎng)也會(huì)逐漸增加更多新的類型錯(cuò)誤,需要的朋友可以參考下
    2022-03-03
  • 利用JS實(shí)現(xiàn)scroll自定義滾動(dòng)效果詳解

    利用JS實(shí)現(xiàn)scroll自定義滾動(dòng)效果詳解

    這篇文章主要給大家介紹了關(guān)于利用JS如何實(shí)現(xiàn)scroll自定義滾動(dòng)效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • 零基礎(chǔ)輕松學(xué)JavaScript閉包

    零基礎(chǔ)輕松學(xué)JavaScript閉包

    本文主要對(duì)JavaScript閉包進(jìn)行詳細(xì)介紹。相信對(duì)零基礎(chǔ)學(xué)習(xí)閉包的朋友們會(huì)有很好的幫助,下面跟著小編一起來看下吧
    2016-12-12
  • JS 異步遍歷的實(shí)現(xiàn)方法

    JS 異步遍歷的實(shí)現(xiàn)方法

    本文主要介紹了JS 異步遍歷的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • JavaScript判斷用戶是否對(duì)表單進(jìn)行了修改的方法

    JavaScript判斷用戶是否對(duì)表單進(jìn)行了修改的方法

    這篇文章主要介紹了JavaScript判斷用戶是否對(duì)表單進(jìn)行了修改的方法,實(shí)例分析了javascript對(duì)表單操作與判定的技巧,需要的朋友可以參考下
    2015-03-03
  • 微信小程序中data-key屬性之?dāng)?shù)據(jù)傳輸(經(jīng)驗(yàn)總結(jié))

    微信小程序中data-key屬性之?dāng)?shù)據(jù)傳輸(經(jīng)驗(yàn)總結(jié))

    這篇文章主要介紹了微信小程序中data-key屬性:數(shù)據(jù)傳輸,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 微信小程序?qū)崿F(xiàn)日歷效果

    微信小程序?qū)崿F(xiàn)日歷效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)日歷效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評(píng)論

丰原市| 黄大仙区| 库车县| 兴山县| 广德县| 张北县| 册亨县| 洪雅县| 屏南县| 镇宁| 太和县| 宾川县| 大埔区| 陈巴尔虎旗| 吉安市| 临沧市| 富宁县| 行唐县| 尖扎县| 红桥区| 屏边| 边坝县| 清涧县| 荃湾区| 东兰县| 东莞市| 泰来县| 卢龙县| 彭山县| 进贤县| 松桃| 邵阳县| 通辽市| 瑞丽市| 青浦区| 双柏县| 洞头县| 呼伦贝尔市| 双牌县| 五寨县| 明水县|