js 解构赋值

解构赋值

  • 解构赋值在内部使用 toObject () 把源数据转换为对象,即在对象解构上下文中,原始值会被当做对象,所以 undefined 和 null 不会被解构

    let [a,b] = ['aaa','bbb']
    //实际上它是这样的:
    let {0:a,1:b} = {0:'aaa',1:'bbb'}
    
    // 所以我们可以这么玩儿:
    const arr = ['aaa','bbb','ccc','ddd']
    let {1:num1,[arr.length-1]:num2} = arr // num1='bbb',num2='ddd'
    //注意:这里的[arr.length-1]并不是二次解构,而是在解构赋值中使用变量的写法
    
  • 结构赋值被赋值的是后者,前者是匹配模式

    // foo 用于和对象中属性名匹配,baz则用于存放解构赋值拿到的属性值或者方法
    let { foo: baz } = { foo: 'aaa', bar: 'bb' };
    
  • 结构赋值的对象结构可以取到继承的属性(即对象原型链上的属性),比如对Array进行解构,可以拿到Object原型上的方法apply

  • 解构赋值可以指定默认值

    let {a='aaa',b} = {b:'bbb'} // a='aaa',b='bbb'
    // 这里判断是否使用默认值其实是判断a===undefined是否为真,比如:
    let {a='aaa',b} = {a:undefined,b:'bbb'} //a='aaa',b='bbb'
    
  • 函数中也可以使用解构赋值

    // 这里fn设置了三个形参a,b,c
    function fn([a,b,c]){
        console.log(a,b,c)
    }
    // 这里不是说传递了一个数组作为函数的形参,而是相当于fn(1,2,3)
    fn([1,2,3]);
    
  • 给函数设置默认值:

    function fn(a, { b = 'bbb', c = 'ccc' } = {}) {
      console.log(a, b, c)
    }
    // 第二个参数是一个对象,不传递这个参数,会默认给函数传递一个对象{b:'bbb',c:'ccc'}
    fn(1,{
      b:2,
      c:3
    }); // 1,2,3
    
  • 可以在for-of中获得Map的键名

    const map = new Map()
    map.set('name',"张三")
    map.set('age',19)
    for (const [key,value] of map) {
      console.log(key,value);
    }
    
  • 骚操作:交换变量的值

    let x = 1
    let y = 2
    ;[x, y] = [y, x] // 前面的分号,懒狗最后的倔强了
    console.log(x,y) //2,1
    // 顺手再来一个
    x ^= y
    y ^= x
    x ^= y
    console.log(x,y) // 1,2
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值