变量的解构赋值

2017-11-01  本文已影响0人  _花

1.数组的结构赋值

从数组或者对象里面提取值,对变量赋值,这被称为解构赋值。

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)解构不成功

如果解构不成功,变量的值就等于undefined,例如:

let  [ x , y ] = [ ]  

let [ x , y ] = [1]

3)解构不完全

let [ x , y ] = [ 1 , 2 , 3 ]  //x=1,y=2

4)默认值

[ 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   注意:如果一个数组成员不严格等于undefined,默认值是不会生效的。

2.对象的结构赋值

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)对于对象的解构赋值,变量的声明和赋值是同时进行的,所以一旦赋值的变量以前生命果就会报错(指用let , const 申明的变量)。

let foo;

let { foo } = { foo : 1}       //  这样写是错的

2)默认值

var { x , y = 5} = { x : 1}    //x =1 , y = 5

其他情况和数组的相同

3)错误情况

var { foo : { bar } }  = { baz : ' baz'  }      //foo为

var x;

{ x } = { x : 1}      //错误大括号不可放在行首 ,应该改为({ x } = { x : 1})

3.字符串的解构赋值

const  [ a , b , c ,d , e ] = ' hello '  // a = 'h'   ..............

let { length : len } = ' hello '    // len = 5;

4.圆括号问题

建议:只要可以,就不要在模式中放置圆括号

变量声明语句中不能带圆括号;

函数参数中不能带圆括号;

不能将整个模式或者嵌套模式里的一层放在圆括号中;

上一篇 下一篇

猜你喜欢

热点阅读