解构赋值
- 解构赋值可分为数组解构赋值和对象解构赋值,数组解构赋值要求右侧必须可迭代(具有Iterator 接口),对象解构赋值要求右侧必须具有属性(不可以是undefined,null)
- 默认值表达式惰性求值,只在需要使用默认值时求值
tips
- 对象解构赋值是通过同名属性进行赋值,首先展开成{key:value}形式,key值同名匹配,value相互赋值
let {bar,foo} = {bar:'aaa',foo:'bbb'} // bar='aaa',foo='bbb' let {bar:bar,foo:foo} = {bar:'aaa',foo:'bbb'} // bar ='aaa',foo ='bbb' let {bar:foo,foo:bar} = {bar:'aaa',foo:'bbb'} // bar ='bbb',foo ='aaa'
- 字符串可以转化为类数组对象,所以可以进行解构赋值
let [a,b,c,d] = 'string' //a='s' //b='t' //c='r' //d='i'
- 解构赋值默认值只在赋值为undefined时取默认值
let func = ({x=0,y=0}={})=>console.log(x,y) //第一个参数为undefined时取默认值{}, //第一个参数属性x,y分别为undefined时取0为默认值 func({x:1,y:2}) //1,2 func({x:1}) //1,0 func({}) //0,0 func() //0,0 let func2 = ({x,y}={x:0,y:0})=>console.log(x,y) //第一个参数为undefined时取默认值{x:0,y:0} func({x:1,y:2}) //1,2 func({x:1}) //1,undefined func({}) //undefined,undefined func() //0,0
- 解构赋值一般不可使用小括号,否则可能会导致无法识别是表达式还是解构赋值模式,制造歧义,会报错
- 变量声明时不可用
- 函数声明时不可用
- 变量赋值模式部分不可用
- 变量赋值非模式部可用
let [(a)] = [1] //error function ([(a)]){} //error ([a]) = [1] //error [(a)] = [1] //a=1
网友评论