ES6 變數的解構賦值

2021-08-31 09:34:15 字數 3257 閱讀 4625

es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構。

let

[foo,

[[bar]

, baz]]=

[1,[

[2],

3]];

foo // 1

bar // 2

baz // 3

let[

,, third]=[

"foo"

,"bar"

,"baz"];

third // "baz"

let[x,

, y]=[

1,2,

3];x // 1

y // 3

let[head,

...tail]=[

1,2,

3,4]

;head // 1

tail // [2, 3, 4]

let[x, y,

...z]=[

'a']

;x // "a"

y // undefined

z //

上面的**表示,可以從陣列中提取值,按照對應位置,為變數賦值。

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

如果解構不成功,變數的值就會為 undefined。

解構允許指定預設值。當乙個陣列成員嚴格等於 undefined 時,預設值才會生效。

let

[x =1]

=[undefined]

;x // 1

let[x =1]

=[null];

x // null

物件的解構與陣列有乙個重要的不同。陣列的元素是按次序排列的,變數的取值由它的位置決定;而物件的屬性沒有次序,所以變數必須與屬性相同,才能取到對應的值。

let=;

foo // "aaa"

bar // "bbb"

let=

;baz // undefined

如果變數名和屬性名不一致,必須寫成下面這樣:

let obj =

;let

= obj;

f // 'hello'

l // 'world'

上面的**中,first 、last 只是匹配的模式,f、l 才是被賦值的變數。

巢狀物件的解構:

let obj =]}

;let]}

= obj;

x // "hello"

y // "world"

p // ["hello", ]

物件的解構也可以設定預設值,預設值生效的條件是物件的屬性值嚴格等於 undefined。

字串也可以進行解構賦值,因為此時字串被轉化成了一種類似陣列的物件。

類似陣列的物件都有乙個 length 屬性,因此還可以對這個屬性進行解構賦值。

const

[a, b, c, d, e]

='hello'

;a // "h"

b // "e"

c // "l"

d // "l"

e // "o"

let=

'hello'

;len //5

解構賦值的規則是,只要等號右邊的值不是物件或陣列,就先將其轉為物件。由於undefined和null無法轉為物件,所以對它們進行解構賦值,都會報錯。

let

=123

;s === number.prototype.tostring // true

let=

true

;s === boolean.prototype.tostring // true

let= undefined;

// typeerror

let=

null

;// typeerror

上面**中,數值和布林值的包裝物件都有tostring屬性,因此變數s都能取到值。

[[1

,2],

[3,4

]].map((

[a, b]

)=> a + b)

;// [ 3, 7 ]

函式引數的解構也可以使用預設值

function

move(=

)move()

;// [3, 8]

move()

;// [3, 0]

move()

;// [0, 0]

move()

;// [0, 0]

let x =1;

let y =2;

[x, y]

=[y, x]

;

// 返回乙個陣列

function

example()

let[a, b, c]

=example()

;

解構賦值可以方便的將一組引數與變數名對應起來

functionf(

[x, y, z])f

([1,

2,3]

);

let jsondata =

;let

= jsondata;

console.

log(id, status, number)

;// 42, "ok", [867, 5309]

jquery.

ajax

=function

(url,

, cache =

true

,complete

=function()

, crossdomain =

false

, global =

true

,// ... more config}=

);

// 獲取鍵名

for(

let[key]

of map)

for(

let[key, value]

of map)

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用來表示尚未存在的物件,常用來表示函式企圖返回乙個不存在的...