Object.assign(target,obj1,obj2,....)
1、第一个是目标对象,后面的参数分别的源对象1,源对象2。。。
2、多个源数据的时候,拷贝字符串类型,不拷贝数值类型和布尔类型。 原因:原始值在包装对象的内部,[[primitiveValue]]上面,Object.assign()不会拷贝这个属性。
3、Object.assign()只会拷贝对象本身的属性,不会拷贝继承的,也不拷贝枚举的。
4、对象的时候,第一级深拷贝,第二级,乃至后边的进行浅拷贝。
5、多个对象进行合并的时候,会进行一个覆盖的操纵。
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <title>Object.assign</title> 7 </head> 8 <body></body> 9 <script> 10 // Object.assign 11 const obj1 = { 12 hostname: "redis-ins-negchbsdok-redis-node-1-2", 13 value: "8个", 14 title: "集群数据节点数", 15 }; 16 const obj2 = { 17 hostname: "es-ins-negchbsdok-redis-node-1-2", 18 value: "24GB", 19 title: "集群磁盘使用量", 20 name: "未命名", 21 }; 22 const target = { 23 title: "目标对象的title", 24 }; 25 26 Object.assign(target, obj2, obj1); 27 console.log(target); //hostname: "redis-ins-negchbsdok-redis-node-1-2",name: "未命名",title: "集群数据节点数",value: "8个" 28 // console.log(Object.assign(undefined)); //报错 29 // console.log(Object.assign(null)); //报错 30 31 console.log(Object.assign(obj1)); 32 console.log(Object.assign(23)); 33 34 const obj3 = "abe"; 35 const num1 = 123; 36 const bool = false; 37 console.log(Object.assign({}, num1, bool, obj3)); // 0: "a",1: "b",2: "e" 38 39 console.log("-----------------------------------------"); 40 41 console.log(Object(false)); 42 console.log(Object(123)); 43 console.log(Object("abc")); 44 45 console.log("----------------------------------------------"); 46 47 const obj4 = { 48 name: "云主机", 49 hostname: { 50 name: "二级对象", 51 }, 52 }; 53 const obj5 = {}; 54 console.log(Object.assign(obj5, obj4)); // 后面全都是hostname:改变了二级对象 55 console.log(obj4); 56 obj4.age = "年龄"; 57 obj4.hostname.name = "改变了二级对象"; 58 console.log(obj4); 59 console.log(obj5); 60 </script> 61 </html>