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