ES6中对象的结构赋值跟ES5相比的有了一点修改;

ES6中的对象复制是右边值是对象,而声明这个对象的也是对象,es6之前的是声明的值是对象,但是声明是值;
ES6之前声明的对象;

 var obj = {
      username: 'jack',
      age: 18,
      sex: '男'
    };

ES6声明对象;

01:ES6基本的结构赋值;

let {name,age,sex} = {name: 'jack',age: 18,sex: '男'};

在赋值的时候需要注意:

左侧的变量名必须与右侧的属性名相同才能正确取值;
与书写的顺序无关(因为对象是无序的数据存储方式);
let { username, gender, age } = { username: 'rose', age: 18, gender: '女' };

书写顺序混乱,但是也能取到相应的值;

let { username, gender, age } = { username: 'rose', age: 18, gender: '女' }; console.log(username, gender, age);

输出的结果为,rose 女 18;

02:左侧名称内容可以和右侧不对应,如果不存在为undefined;

let { name, age, aiHao } = { name: 'jack', age: 18, gender: '男' };
console.log(name, age, aiHao);

此时aiHao就没有被赋值,所以为undefined;

03: 如果要设置的变量名与属性名不同时,可以设置别名

let { username: un, age, gender } = { username: 'jack', age: 18, gender: '男' };

注意:我们在给这个属性设置了别名的时候,原来的属性名就会被系统默认为无,此时如果输出原来的属性名就会报错;

let { username: un, age, gender } = { username: 'jack', age: 18, gender: '男' };
 console.log(un, age, gender);
 console.log(username); // Uncaught ReferenceError: username is not defined

有些时候我们建立name属性他不会报错,并不是解构中设置了name,而是window对象自带属性name;

let { name: n, age: a, gender: g } = { name: 'jack', age: 19, gender: '男' }; console.log(n, a, g);
console.log(name)

04: 默认值设置;
有些时候我们在创建对象的时候,我们在设置变量名的时候,有些属性和值没有,此时我们就可以给他们设置一个默认的值,如果有的话就使用他固有的属性和值,如果没有的话就使用我们给他默认的值;

let {username = '张三', sex, age = '男'} = {sex: 18};
    console.log(username,age,sex);

此时的输出为,张三 男 18;
我们没有给他设置属性和值而是给他设置了一个默认的属性和值,当我们设置的变量拿不到值时,就会使用我们给的默认值;

如果我们给他设置默认值了,它本身也有值就会使用他本身的值,不会使用我们默认加给他的值;

let {username = '李四'} = {username: '张三'};
    console.log(username);

此时就不会采取我们给的默认值所以输出为:张三;

05: 对象的剩余值;
我们可以通过…other来保存对象剩余的属性和值;

let { age, ...other } = { username: 'jack', gender: '男', age: 18 };
console.log(age, other);

此时的输出为:18 {username: “jack”, gender: “男”};
以上是我对ES6对象的一种理解和概念;