ES6中对对象的修改还是比较大的,增加了很多很实用的方法,让开发者使用对象时更加便利,小结一下。很多说明和理解都写在注释里了,欢迎指正~~
/*
Object.assign()方法用于对象的合并。将源对象的可枚举属性复制到目标属性。类似于jQuery的extend()
*/
var target = {a : 1};
var source = {b : 2};
var aim = Object.assign(target,source);
console.table(aim); // {a : 1,b : 2}
/*如果有同名属性,后面的属性会覆盖前面的属性*/
var target1 = {a : 1};
var source1 = {a : 3,b : 2};
var aim1 = Object.assign(target,source);
console.log(aim1); // {a : 3,b : 2}
/*如果只有一个参数则直接返回该参数 如果该参数不是对象则会先转换成对象然后返回*/
var obj = {a : 1};
Object.assign(obj) === obj; // true
typeof Object.assign(2); //object
/*undefined和null不能转换成对象所以如果他们作为参数就会报错*/
// Object.assign(null); Object.assign(undefined); // 报错
/*Object.assign()方法实行的浅拷贝而不是深拷贝,也就是说,如果源对象的某个属性值是个对象,那么目标对象拷贝得到的是这个对象的引用
也就是说,源对象的这个属性的改变会反映到目标对象上*/
var obj1 = {a : {b : 1}};
var obj2 = Object.assign({},obj1); // {a : {b : 1}}
obj1.a.b = 2;
console.log(obj2); // {a : {b : 2}}
/*这种嵌套的对象,如果遇到同名属性,就替换而不是添加*/
var obj3 = {a : {b : 1,c : 2}};
var obj4 = {a : {b : 3,}};
Object.assign(obj3,obj4); // {a : {b : 3,}} 两个对象有同名属性a 所以会把整个a属性替换 而不会得到 {a : {b : 3,c : 2}}
/*Object.keys() 返回一个数组 数组的成员是对象的键*/
var obj5 = { foo: "bar", baz: 42 };
Object.keys(obj5); // ['foo','baz']
/*Object.values() 返回一个数组 数组的成员是属性值*/
var obj6 = {foo : 'bar',baz : {a : 1}};
Object.values(obj6); // ['bar',{a : 1}]
/*Object.entries() 返回一个数组 数组的成员为键值对数组*/
Object.entries(obj5); // [ ['foo','bar'],['baz',42] ]
/*Object.getOwnPropertyDescriptor()返回一个对象,描述对象的某个属性*/
var obj7 = {foo : 'bar'};
Object.getOwnPropertyDescriptor(obj7,'foo');
/*{ value: "bar",
writable: true,
enumerable: true, // 可枚举性 如果该属性的可枚举性为false 以下操作则会忽略该属性 for...in Object.keys() JSON.stringify()
configurable: true
}*/
/* --单纯的解构赋值可以读取继承的属性,而rest解构赋值变量只能读取对象本身的属性(不能读取继承属性和Symbol属性)-- */