文章

面经~零散

=和浅拷贝的区别

基本数据类型: 两者相同。

比如:=号创建一个新的变量,值是要拷贝的值的副本,因此改变新的变量的值不会改变原来拷贝的值。

let a=1;
let b=a;
b=2;
console.log(a,b)   //  1, 2

引用数据类型:

=号创建一个新的变量,值是原始数据的内存地址。因此改变了新的变量的值也会引起原始数据的变化。

let obj1 = { a: 1, b: { c: 2 } };
let obj2 = obj1; // 使用 "=" 赋值操作符
​
obj2.b.c = 3;
console.log(obj1.b.c); // 输出 3,因为 obj1 和 obj2 引用的是同一个对象

浅拷贝:创建一个新的对象,其中源对象中的是基本数据类型属性值,那么直接被复制到新对象中,如果是引用数据类型,那么复制这些属性的引用(也就是地址)。因此。如果改变了新对象中引用对象的值,源对象的对应属性也受到影响。

let obj1 = { a: 1, b: { c: 2 } };
let obj2 = obj1; // 使用 "=" 赋值操作符
​
obj2.b.c = 3;
console.log(obj1.b.c); // 输出 3,因为 obj1 和 obj2 引用的是同一个对象
​
// 浅拷贝
let obj3 = { a: obj1.a, b: { ...obj1.b } };
obj3.b.c = 4;
console.log(obj1.b.c,obj3.b.c);// 输出 3,因为,obj3.b 是 obj1.b 的浅拷贝【基本数据类型】,所以修改 obj3.b.c 不会影响 obj1.b.c

// 但是如果引用数据类型,则会改变源对象,比如把Obj1 中的 number类型的c改成对象
let obj1 = { a: 1, b: { c: {d:15} } };
let obj3 = { a: obj1.a, b: { ...obj1.b } };
obj3.b.c.d = 4;
console.log(obj1.b.c.d,obj3.b.c.d);// 输出 4,4

=和浅拷贝的区别

css中em和rem是什么,有什么区别?_css em和rem的区别-CSDN博客

License:  CC BY 4.0