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