结构赋值

2019-12-29  本文已影响0人  北方有嘉木24

数组的结构赋值

按顺序排列,取值由位置决定

    let [a, b, c] = [1, 2, 3]
    a //1
    b //2
    c //3
    let  [x, y, ...z] = ['a'];
    x // a
    y //undefined 结构不成功
    z //[]
    let [e, f, g] = [1, [2, 3], 4];
    e //1
    f //2 不完全结构
    g //4
    let [foo] = 1;//报错,右边等号的值或者转为对象以后必须具备Iterator接口
    let [f = true] = [];
    f //true 默认值

对象的机构赋值

变量名与属性名必须相同才能取值,先找到同名属性,在赋值给对应的变量,真正被复制的是变量

    let {bar, foo} = {
        foo: "aaa",
        bar: "bbb"
    };
    bar //bbb
    foo //aaa
    let baz = {
        foo: "aaa",
        bar: "bbb"
    };
    baz //undefined
    var {foo: baz} = {
        foo: "aaa",
        bar: "bbb"
    };
    baz // aaa

嵌套赋值

    let obj = {
        p: [
            "hello",
            {y: 'world'}
        ]
    };
    let {p: [x, {y}]} = obj;
    x //hello
    y //world
    let {p, {p: [x, {y}]}} = obj;
    x //hello
    y //world
    p //["hello", {y: "world"}]

默认赋值

必须严格等于undefined,结构赋值失败值等于undefined

其他

子串会被解析为一个类数组

    let [a, c] = "ad";
    a //"a"
    c //"d"

布尔与数字的结构赋值

等号做组边是数字或者布尔是,会先转换为对象。null和undefined无法转换为对象,报错

    let {to: s} = 123;
    s// undefined Number 沒有to方法
    let {toString: ss} = 123;
    ss //toString() { [native code] }
    //ss === Number.prototype.toString true
    // s === Number.prototype.toString false
    let {prop: x} = undefined; // TypeError

用途

1、交互变量

    let x = 1, y = 2;
    [x, y] === [y, x];
    x //2
    y //1

2、读取函数返回值

    function fn(){
        return [1, 2, 3];
    }
    let [a, b, c] = fn();
    function fn1(){
        return {
            foo: 1,
            bar: 2
        }
    }
    let {foo, bar} = fn1();
    foo //1
    bar //2
上一篇下一篇

猜你喜欢

热点阅读