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对象的一种理解和概念;