【es6】解构赋值

基本用法

    let [x, y, ...z] = ['a']
    //"a", undefined, []

1.等号右边如果不是数组,将会报错(不是可遍历结构)
2.解构赋值 var, let, const命令声明均适用
3.set结构也可解构赋值(具有Iterator接口,可采用数组形式结构赋值)
set解构:任何类型的单个值的集合

    let [x, y, z] = new Set(["a", "b", "c"])
    x //"a"

默认值

1.数组成员的值不严格等于undefined,默认值不生效(null的话相应值依然为null)

    [x=1, y=2, z=3, o=4] = ['a', , undefined, null]
    //"a", 2, 3, null

2.如果默认值是表达式,表达式惰性求值,只有在用到的时候才会去执行
3.默认值可以引用结构赋值的其他变量,但该变量必须已声明

对象结构赋值

1.数组按次序排列,对象变量必须与属性同名

    var {bar, foo, baz: loc} = {foo: 'aaa', baz: 'bbb'}
    bar //undefined
    foo //"aaa"
    loc //"bbb"
    baz //ReferenceError: baz is not defined

2.变量以前声明过,使用let赋值会报错
3.可用于嵌套结构的对象

    var node = {
        loc: {
            start: {
                line: 1,
                column: 5
            }
        }
    }
    var {loc:{start:{line}}} = node
    line //1
    loc //ReferenceError: loc is not defined
    start //ReferenceError: start is not defined
line是变量,loc,start都是模式

4.对象结构可以指定默认值
(生效条件是对象属性值严格等于undefined,null不会生效,解构失败值为undefined)
5.解构模式是嵌套对象,且子对象父属性不存在,报错
6.已声明的变量解构赋值

    var x;
    {x}={x:1} //SyntaxError: Unexpected token =
    ({x}={x:1}) //正确
js会将{x}理解成代码块,不将大括号写在行首即可

7.可以将现有对象的方法赋值到某个变量
let { sin, cos, log } = Math(Math对象的名为sin的方法直接赋值给sin变量)

字符串解构赋值

const [a,b] = 'hello' a//h
let {length:len} = 'hello' len//5(字符串本身包含length属性)

数值&布尔值

解构赋值规则:

  • 只要等号右边不是对象先将其转化为对象,
  • undefined和null无法转换为对象,报错
let a = true
{b} = {a}
//Object {a: true}

函数参数解构

[[1,2],[3,4]].map((a,b)=>a+b) //[3,7]
function({x=0,y=0}={}){
    return [x,y]
}

undefined会触发函数参数默认值

圆括号问题

1.变量声明语句中,模式不能带有圆括号 let {x:(c)} = {}
2.函数参数中,模式不能带有圆括号(函数参数也属于变量声明)
3.整个模式或嵌套模式中的一层,不可放入圆括号

赋值语句的非模式部分可使用

用途

1.[x, y] = [y, x]
2.函数返回的多个值分别赋值
3.函数参数与变量名对应
4.提取json数据(ajax请求返回数据处理中可用到)

    ({
        needServicePwd: this.needServicePwd,
        needImgCode: this.needImgCode,
        needSmsCode: this.needSmsCode
    } = data)

5.函数参数的默认值,避免在函数内写var foo = config.foo || ”
6.遍历Map结构

    var map = new Map();
    map.set('first', 'hello');
    map.set('second', 'world');

    for (let [key, value] of map) {
      console.log(key + " is " + value);
    }

7.引用模块的指定方法

    const { SourceMapConsumer, SourceNode } = require("source-map");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值