美文网首页
ES6:变量的解构赋值

ES6:变量的解构赋值

作者: 壮哉我大前端 | 来源:发表于2017-04-10 12:14 被阅读0次

    1、数组的解构赋值

    1.1、基本用法

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
    很久很久以前,我们为这里赋值,只能直接指定值。

    let a = "x";
    let b = "x";
    let c = "b";
    

    现在,用ES6,我们可以写成:

    let [a, b, c] = ["x", "x", "b"];
    

    使用嵌套数组进行结构例子。

    let [a, ...b] = [1, 2, 3, 4];
    // 输出
    a // 1
    b // [2, 3, 4]
    
    解构赋值
    let [x, y, ...z] = ["x"];
    x // "x"
    y // undefined
    z // []
    
    解构赋值

    如果解构不成功,变量的值就等于undefined

    let [x] = [];
    let [a, b] = [1];
    
    解构赋值

    1.2、默认值

    解构赋值允许指定默认值。

    let [a = true] = [];
    let [x, y = "b"] = ["a", "diudiudiu"];
    let [o, p = "hehe'] = ["haha", undefined];
    

    注意,ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,如果一个数组成员不严格等于undefined,默认值是不会生效的。

    解构赋值

    2、对象的解构赋值

    let {a, b} = {a: "x", b: "y"};
    

    对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。


    对象解构赋值

    如果变量名与属性名不一致,必须写成下面这样。

    let {a: c} = {a: "x", b: "y"};
    c // x
    
    let o = {first: "x", last: "b"};
    let {first: f, last: l} = o;
    
    对象解构赋值

    这实际上说明,对象的解构赋值是下面形式的简写。

    let { foo: foo, bar: bar } = { foo: "x", bar: "b" };
    

    也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。

    let {a: c} = {a: "x", b: "y"};
    

    上面代码中,a是匹配的模式,c才是变量。真正被赋值的是变量c,而不是模式a

    对象解构赋值

    对象的解构也可以指定默认值。

    let {a: b = 1} = {a: 0};
    let {x: y = 3} = {x: 5};
    
    对象解构赋值

    默认值生效的条件是,对象的属性值严格等于undefined。
    如果解构不成功,变量的值就等于undefined

    let {a} = {b: "c"};
    a // undefined
    

    由于数组本质是特殊的对象,因此可以对数组进行对象属性的解构。

    let arr = [1, 2, 3];
    let {0: first, [arr.length - 1]: last} = arr;
    first // 1
    last // 3
    
    对象解构赋值

    数组arr0键对应的值是1[arr.length - 1]就是2键,对应的值是3

    3、字符串的解构赋值

    字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象。

    let [a, b, c] = "xxb";
    
    字符串解构赋值

    类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。

    let {length: len} = "xxb666";
    
    字符串解构赋值

    ————
    前端·小b
    纸上学来终觉浅,绝知此事要躬行

    相关文章

      网友评论

          本文标题:ES6:变量的解构赋值

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