拷贝之Object.assign()

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>
原文地址:https://www.cnblogs.com/qianqiang0703/p/14231429.html