美文网首页
解构赋值

解构赋值

作者: 陶六六 | 来源:发表于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