ES6中的解構賦值

2022-08-18 04:24:07 字數 4134 閱讀 8730

從前我們對變數賦值時,都是通過賦值運算子,右邊賦值給左邊這樣操作的。

let a = 1;

let b = 2;

let c = 3;

let obj = {};

obj.name = 'mm';

obj.age = 18;

現在我們通過模式匹配的方式來賦值。

左邊是解構目標,右邊是解構源。

左右結構要保持一致。

陣列的解構是有順序的,是一一對應的。(等號右邊直接寫陣列的變數名也可以。)

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

console.log(a,b,c);

let arr = [4,5,6];

let [x,y,z] = arr;

只要右邊的模式和左邊相同,那麼左邊對應的變數就會被賦予對應的值。

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

console.log(a,b,c,d,e);

如果右邊沒有給值,就當做undefined處理。

let [a,b,c] = [1,2]; // let [a,b,c] = [1,2,undefined];

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

語法:...變數名作用:可以將右邊陣列中剩餘的值解構到左邊,而且是以陣列的形式儲存。

let [a, ...b] = [1,2,3,4,5,6];

console.log('a為:', a);

console.log('b為:', b);

剩餘運算子只能放在最後乙個引數的位置上,否則報錯。

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

console.log(b);

指定預設值,預設值產生的條件是:右邊陣列中對應的資料(====)嚴格等於undefined。

例如下面,y=10就表示,y的預設值為10。

let [x,y=10] = [1]; // let [x,y=10] = [1, undefined];

console.log(x,y);

let [a=10, b=a] = ; // a=10,b=10

let [a=10, b=a] = [1]; // a=1, b=1

let [a=10, b=a] = [1,2]; // a=1, b=2

let [a=b, b=20] = ; // 報錯(在用b之前還沒初始化值)

分析:

第一行:a和b匹配到undefined,所以採用預設值,a是10,b的值是a,也就是10;

第二行:a匹配到1,b匹配到undefined,所以b的值就是a,也就是1;

第三行:a和b均匹配到數值,因此a為1,b為2;(這裡b不會是預設給到a的值,因為它自己有匹配的值)

第四行:a=b,但是b還沒有初始化,因此報錯。

只有左邊物件的變數名和右邊物件的屬性名相同時,才會取到值。(等號右邊寫物件的變數名也可以。)

let  = ; // a='foo' b='bar'

let obj =

let = obj; // name='mm' age=18

let = ; // say='undefined' (找不到對應的屬性名,那就給undefined)

let obj = ] };

let ] } = obj; // x='hello' y='world'

左邊:p是一種模式匹配,真正解構的是後面的陣列中的x和物件中的y。

因此按照陣列解構'hello'賦值給x,按照物件解構'world'賦值給y。

那麼要想獲取物件中p的屬性值呢,直接寫p就行。

let  = obj; // p=['hello', ]
let  = ; // a=1 b=2 c=undefined
let obj = ] };

let ] } = obj; // x='hello'

剩下的屬性以物件的形式保留。

let  = ; // a=1 b=2 res=
指定預設值,預設值產生的條件是:物件屬性名(====)嚴格等於undefined。

let  = ; // a=1 b=10 c=undefined

let = ; // x=3

let = ; // y=null

物件的解構賦值的內部機制,是先找到同名屬性,然後再賦給對應的變數。真正被賦值的是後者,而不是前者。

例如,等號左邊foo對應右邊的同名屬性是foo,它的值是'foo',這個值最後賦值給foo對應的變數f而非foo。

簡而言之,這個f和b相當於是乙個別名

let  = ; // f='foo' b='bar'
let x=1, y=2;

[x, y] = [y, x];

console.log(x,y); // 2 1

function foo() 

let [a,b,c] = foo();

console.log(a,b,c); // 1 2 3

function bar()

}let = bar();

console.log(b1, b2); // 'bar1' 'bar2'

var json = 

let = json;

console.log(name, age); // 'mm' 18 '暫無資料'

匯出模組時用export,匯入模組時用import。

模組匯出:(檔名為:module.js)

let [a,b,c] = [1,'second',true];

export

模組匯入:

import  from './module.js';

console.log(a,b,c); // 1,'second',true

等號左右結構和形式要對應;

陣列解構賦值時,左邊變數的順序和右邊變數值的順序是一一對應的;物件結構賦值時,左右兩側的順序不重要,只要找到就行;

如果左邊沒有匹配到右邊的值,那麼當做undefined處理,把undefined賦值給左邊;

剩餘運算子要放在引數末尾的位置上,如果是陣列,那麼會以陣列的形式賦值給左邊的變數,如果是物件,則以物件形式賦值。

預設值生效的前提是,右邊對應陣列位置或者物件屬性名的資料嚴格等於undefined。(===)

用途:ajax後台大量的json資料傳遞到瀏覽器客戶端,用解構賦值可以方便地獲取資料。

用途:功能模組匯入。

ES6中解構賦值

理解 解構賦值就是從目標物件或陣列中提取自己想要的變數。最常用的場景是 element ui 或 vant ui 按需引入,請求介面返回想要的資料。陣列解構 乙個蘿蔔乙個坑,按照順序進行 var a,b,c 12,13 a,b 這個寫法報錯 invalid destructuring assignm...

ES6 解構賦值

陣列的解構賦值 let a,b 12,13 let a,b,c d 13,15,16 let a,b c 78,12 23 let x,y 1,3,5 x 1,y 3 let x,y,z a x a,y undefined z let h,b 1,2,3,4 1,2,3,4 預設值 let x tr...

ES6解構賦值

一 基本用法 解構 destructuring 按照一定的模式,從陣列或者物件中提取值,對變數進行賦值。let par1,par2,par3 1,2 console.log par1,par2,par3 1 2 不完全解構時par3對值為undefined 解構賦值允許指定變數對預設值。let pa...