ES6 變數的解構賦值

2021-09-02 07:28:57 字數 4002 閱讀 5537

解構賦值是指es6允許按照一定的模式從陣列和物件中提取值,然後對變數進行賦值。

基本用法:

//宣告變數通常是

let a=1;

let b=2;

let c=3;

//或者是

let a=

1,b=

2,c=3;

//es6解構賦值就可以寫成

let[a,b,c]=[

1,2,

3];

解構賦值的本質屬於「模式匹配」,只要等號兩邊模式相同,左邊的變數就會被賦予對應的值。

let

[a,[

[b],c]]=

[1,[

[2],

3]];

a//1

b//2

c//3

let[

,, c]=[

1,2,

3];c//3

let[a,

...b]=[

1,2,

3,4]

;a//1

b//[2,3,4]

let[a,b,

...c]=[

1];a//1

b//undefined 如果解構不成功,變數的值都會等於undefined

c////不完全解構,即等號左邊的模式只匹配一部分的等號右邊的陣列。

let[a,b]=[

1,2,

3];a//1

b//2

let[a,

[b],c]=[

1,[2

,3],

4];a//1

b//2

c//4

//如果等號兩邊不一致,將會報錯

let[a]=1

;//vm9593:1 uncaught typeerror: 1 is not iterable

//對於set結構,也可以使用陣列的解構賦值

let[x,y,z]

=new

set(

['a'

,'b'

,'c'])

;x//"a"

y//"b"

z//"c"

//解構賦值允許指定預設值

let[foo=

true]=

;foo//true

let[x,y=

'b']=[

'a']

;//x='a',y='b'

let[x,y=

'b']=[

'a',undefined]

;//x='a',y='b'

es6內部使用嚴格相等運算子(===)判斷乙個位置是否有值。所以,如果乙個陣列成員等於不嚴格等於undefined,預設值不會生效。

let

[x=1]=

[undefined]

;x//1

let[x=1]

=[null];

x//null

//預設值可以引用其他的變數,但該變數必須宣告。

let[x=

1,y=x]=[

];//x=1;y=1

let[x=

1,y=x]=[

2];//x=2;y=2

let[x=

1,y=x]=[

1,2]

;//x=1;y=2

let[x=y,y=1]

=;//vm9634:1 uncaught referenceerror: y is not defined

物件的解構賦值

物件的解構賦值與陣列有乙個重要的不同。陣列的元素是按次序排列的,變數的取值是由它的位置決定;而物件的屬性沒有次序,變數必須與屬性同名才能取得正確的值。

let=;

foo//'aaa'

bar//'bbb'

let=

;baz//undefined

//實際上說明,物件的解構賦值是下面形式得簡寫

let=

;let=;

baz//'aaa'

foo//uncaught referenceerror: foo is not defined

//巢狀賦值

let obj=

;let arr=

;(=)

;obj//

arr//[true]

//指定預設值

var=

;x//1

y//5

var=

y//5

//預設值生效的條件和陣列一樣,也是物件的屬性值嚴格等於undefined。

var=

;x//3

var=

;x//null

字串的解構賦值

const

[a,b,c,d,e]

='hello'

;a//"h"

b//"e"

c//"l"

d//"l"

e//"o"

let=

'hello'

;len//5

數值和布林值的解構賦值

解構賦值時,如果等號右邊的是數值和布林值,則會先轉為物件。如果無法轉為物件,對它們進行解構賦值時就會報錯

let

=undefined;

//typeerror

let=

null

;//typeerror

函式解構賦值

function

add(

[x,y]

)add([

1,2]

);//3[[1

,2],

[3,4

]].map((

[a,b]

)=>a+b)

;//[3,7][1

,undefined,3]

.map

((x=

'yes'

)=>x)

;//[1,'yes',3]

解構賦值的用途:

1.變換變數的值

let x=1;

let y=2;

[x,y]

=[y,x]

;

2.從函式返回多個值

//返回乙個陣列

functionf(

)let

[a,b,c]

=example()

;//返回乙個物件

function

example()

;}

3.函式引數的定義

functionf(

[x,y,z])f

([1,

2,3]

)function

example()

f();

4.提取json 資料

let jsondata=

;let

=jsondata;

5.函式引數預設值

6.遍歷map結構

var map=

newmap()

;map.

set(

'first'

,'hello');

map.

set(

'second'

,'world');

for(

let[key,value]

of map)

7.指定模組的指定方法

const

=require

("person"

);

es6變數解構賦值

es6允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構。解構賦值在實際開發中可以大量減少我們的 量,並且讓我們的程式結構更清晰。陣列的解構賦值 let a,b 1 2 console.log a 1 console.log b 2 上面的 表示,可以從陣列中提取值,按照位置的物件...

ES6變數解構賦值

es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構 es6之前我們申明多個變數需要按照下面的方法 let l a 1 let b 2 let c 3 let d 4 或者 let a 1,b 2,c 3,d 4 現在我們可以更加簡便 let a,b,c,d 1,2,3,4 ...

es6 變數解構賦值

1.陣列的解構賦值 等號兩邊的模式相同,左邊的變數就會被賦予對應的值 預設值 undefined型別只有乙個值,即undefined。當宣告的變數還未被初始化時,變數的預設值為undefined。null型別也只有乙個值,即null。null用來表示尚未存在的物件,常用來表示函式企圖返回乙個不存在的...