1.數(shù)組的結(jié)構(gòu)賦值
從數(shù)組或者對象里面提取值蜡塌,對變量賦值勿负,這被稱為解構(gòu)賦值。
1)模式匹配
var [ a , b , c ] = [ 1 , 2 , 3 ] ? ?//模式匹配 ? a=1,b=2,c=3
let [ x , y , ...z] = [ 'a' ] ? ? ? ?//x='a',y=undefined,z=[ ]
2)解構(gòu)不成功
如果解構(gòu)不成功琅摩,變量的值就等于undefined锭硼,例如:
let ?[ x , y ] = [ ] ?
let [ x , y ] = [1]
3)解構(gòu)不完全
let [ x , y ] = [ 1 , 2 , 3 ] ?//x=1,y=2
4)默認(rèn)值
[ x , y = 1] = [ 2 ] ? // ?x = 2 ,y = 1
[ x , y = 1] = [ 2 , undefined ]? // x = 2 ,y = 1
[ x , y = 1] = [ 2 , null ]? // x = 2 ,y = null ? 注意:如果一個數(shù)組成員不嚴(yán)格等于undefined,默認(rèn)值是不會生效的檀头。
2.對象的結(jié)構(gòu)賦值
let { foo : foo , baz : baz} ?= { foo : 1, baz : 2} ? ? ? ? //foo = 1,baz = 2
let { foo , baz}? = { foo : 1, baz : 2}? ? ? ? //foo = 1,baz = 2?
let { foo : f , baz : b}? = { foo : 1, baz : 2}? ? ? ? //f = 1,b = 2
1)對于對象的解構(gòu)賦值,變量的聲明和賦值是同時進(jìn)行的溉浙,所以一旦賦值的變量以前生命果就會報錯(指用let , const 申明的變量)蒋荚。
let foo;
let { foo } = { foo : 1} ? ? ? // ?這樣寫是錯的
2)默認(rèn)值
var { x , y = 5} = { x : 1} ? ?//x =1 , y = 5
其他情況和數(shù)組的相同
3)錯誤情況
var { foo : { bar } } ?= { baz : ' baz' ?} ? ? ?//foo為
var x;
{ x } = { x : 1}? ? ? //錯誤大括號不可放在行首 ,應(yīng)該改為({ x } = { x : 1})
3.字符串的解構(gòu)賦值
const ?[ a , b , c ,d , e ] = ' hello ' ?// a = 'h' ? ..............
let { length : len } = ' hello ' ? ?// len = 5;
4.圓括號問題
建議:只要可以惊奇,就不要在模式中放置圓括號
變量聲明語句中不能帶圓括號播赁;
函數(shù)參數(shù)中不能帶圓括號;
不能將整個模式或者嵌套模式里的一層放在圓括號中容为;