美文网首页
解构赋值

解构赋值

作者: 陶六六 | 来源:发表于2018-08-19 20:28 被阅读0次

解构赋值

  1. 解构赋值可分为数组解构赋值和对象解构赋值,数组解构赋值要求右侧必须可迭代(具有Iterator 接口),对象解构赋值要求右侧必须具有属性(不可以是undefined,null)
  2. 默认值表达式惰性求值,只在需要使用默认值时求值

tips

  1. 对象解构赋值是通过同名属性进行赋值,首先展开成{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'
    
  2. 字符串可以转化为类数组对象,所以可以进行解构赋值
        let [a,b,c,d] = 'string'
        //a='s'
        //b='t'
        //c='r'
        //d='i'
    
  3. 解构赋值默认值只在赋值为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
    
  4. 解构赋值一般不可使用小括号,否则可能会导致无法识别是表达式还是解构赋值模式,制造歧义,会报错
    • 变量声明时不可用
    • 函数声明时不可用
    • 变量赋值模式部分不可用
    • 变量赋值非模式部可用
        let [(a)] = [1] //error
        function ([(a)]){} //error
        ([a]) = [1] //error
        [(a)] = [1] //a=1
    

相关文章

网友评论

      本文标题:解构赋值

      本文链接:https://www.haomeiwen.com/subject/pcqhiftx.html