一、Object.assign()
1、作用:
用于合并对象,将源对象中的属性复制到目标对象中,返回目标对象
2、用法:Object.assign方法的第一个参数是目标对象,后边的其他参数都是源对象;
Object.assign(target, ...sources)
参数:target--->目标对象、source--->源对象
返回值:target,目标对象;
const A = { a: 1, b: 2 };
const B = { b: 3, c: 4 };
const C = { c: 5, d: 6 };
const ABC = Object.assign(A, B, C);
console.log(A); // 目标对象A: {a: 1, b: 3, c: 5, d: 6}
console.log(ABC); // ABC: {a: 1, b: 3, c: 5, d: 6}
console.log(A === ABC); // true
3、目标对象为空对象 { } 的用法:如果只是想将两个或多个对象的属性合并到一起,不改变原有对象的属性,可以用一个空的对象作为 A 对象
const A = { a: 1, b: 2 };
const B = { b: 3, c: 4 };
const C = { c: 5, d: 6 };
const ABC = Object.assign({},A,B,C); // 此时不会改变A对象
console.log(A); // 目标对象A: { a: 1, b: 2 }
console.log(ABC); // ABC: {a: 1, b: 3, c: 5, d: 6}
console.log(A === ABC); // false
4、注意:
1、如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。
2、后面的源对象的属性将类似地覆盖前面的源对象的属性。
3、Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象。
4、注意目标自身也会改变
5、对象的拷贝:Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象
var object1 = { a: 1, b: 2, c: 3 };
var object2 = Object.assign({c: 4, d: 5}, object1);
console.log(object2.c, object2.d); // 3 5
console.log(object1) // { a: 1, b: 2, c: 3 }
console.log(object2) // { c: 3, d: 5, a: 1, b: 2 }
6、对象的深拷贝:深拷贝一份,形成一个新的引用类型,这样就不会发生引用错乱的问题,使得我们可以多次使用同样的数据,而不用担心数据之间会起冲突。
(当对象中只有一级属性,没有二级属性的时候)
let object1 = { a: 1, b: 2 };
let object2 = Object.assign({}, obj1, {b: 20});
console.log(object1); // { a: 1, b: 2 }
console.log(object2); // { a: 1, b: 20 }
7、对象的浅拷贝:浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝
(当对象中有对象的时候,此方法,在二级属性以后就是浅拷贝)
var object1 = { a: 1,b: { c: 2, d: 3 } };
var object2 = Object.assign({}, object1);
object2.a = 10;
object2.b.c = 20;
console.log(object1); // { a: 1, b: { c: 20, d: 3 } }
console.log(object2) //{ a: 10, b: { c: 20, d: 3} }
8、总结:
object.assign()主要用于对象合并,将源对象中的属性复制到目标对象中,他将返回目标对象。如果有同名属性的话,后面的属性值会覆盖前面的属性值,如果有多个源对象,没有同名的属性会直接复制到目标对象上,还可以进行对象的深浅拷贝,当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝;当对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。
二、Object.keys(obj)
1、遍历对象,返回该对象中所有的 key 值 (除了不可枚举属性和Symbol属性)组成的数组
2、示例
例一:
var obj = { 0:'熊大',1:'熊二',2:'光头强' }
var keyValue = Object.keys(obj) // 使用Object.keys()方法
console.log(keyValue) // 得到是:["0","1","2"]
例二:
var obj2 = {'name':'a','list':{'a':'value1','b':'value2'},'num':13}
var keyValue2 = Object.keys(obj2)
console.log(keyValue2) // 得到是:["name","list","num"]
例三:结合数组的结合forEach来使用:Object.keys(要遍历的对象).forEach((v,i) => {})
var obj2 = {'name':'a','list':{'a':'value1','b':'value2'},'num':13}
Object.keys(obj2).forEach(function(key){ console.log(key, obj2[key]); })
得到:name---a list---{a:"value",b:"value"} num----13
三、Object.values(obj)
1、遍历对象,返回该对象中所有的 value 值 (除了不可枚举属性和Symbol属性)组成的数组
2、示例
普通对象:
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
类数组
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.values(obj)); // ['a', 'b', 'c']
如果属性是数字,则会按照属性的大小按顺序返回
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(an_obj)); // ['b', 'c', 'a']
四、Object.hasOwnProoerty()
1、作用:用于判断 A 对象中是否有 B 属性,返回bool值,存在返回true,否则返回false
2、示例
let A = { a:1, b:2 }
let bool_A1 = A.hasOwnProoerty('a')
let bool_A2 = A.hasOwnProoerty('c')
console log(bool_A1); // true
console log(bool_A2); // false