深浅拷贝:
浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。
仅仅是复制了引用,彼此之间的操作会互相影响
复制代码
深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。
在堆中重新分配内存,不同的地址,相同的值,互不影响
复制代码
数组类常见方法
let arr = ['memo', 'fire', 'bug'];let arrCopy = arr.slice(0);arrCopy[0] = 'rocket';console.log(arr);//["memo", "fire", "bug"]console.log(arrCopy);//["rocket", "fire", "bug"]
复制代码
let arr = ['memo', 'fire', 'bug'];let arrCopy = at();arrCopy[0] = 'rocket';console.log(arr); // ["memo", "fire", "bug"]console.log(arrCopy); // ["rocket", "fire", "bug"]
复制代码
其实Array的slice和concat方法并不是真正的深拷贝, 对于Array的第一层的元素是深拷贝,而Array的第二层 slice和concat方法是复制引用。
let a = [[1, 2], 3, 4];
let b = a.concat();
console.log(a === b); // falsea[0][0] = 0;
console.log(a); // [[0, 2], 3, 4]
console.log(b); // [[0, 2], 3, 4]
复制代码
对象类常见方法
JSON.parse(JSON.stringify(obj))
JSON.stringify():把一个js对象序列化为一个JSON字符串 JSON.parse():把JSON字符串反序列化为一个js对象
let a = {a:1,b:{cd:2,ef:3}};
let b = JSON.parse(JSON.stringify(a));
a.a=11;
a.b.cd=22;
console.log(JSON.stringify(a));//{"a":11,"b":{"cd":22,"ef":3}}
console.log(JSON.stringify(b));//{"a":1,"b":{"cd":2,"ef":3}}
复制代码
PS: 不过 Json压缩不可靠,fn会被过滤
Object.assign({}, obj)(一维深拷贝,二维是浅拷贝)
let a = {a:1,b:{cd:2,ef:3}};
let b = Object.assign({},a);
a.a=11;
a.b.cd=22;
console.log(JSON.stringify(a));//{"a":11,"b":{"cd":22,"ef":3}}
console.log(JSON.stringify(b));//{"a":1,"b":{"cd":22,"ef":3}}复制代码
let a = {a:1,b:{cd:2,ef:3}};
let b = {...a};
a.a=11;
a.b.cd=22;
console.log(JSON.stringify(a));//{"a":11,"b":{"cd":22,"ef":3}}
console.log(JSON.stringify(b));//{"a":1,"b":{"cd":22,"ef":3}}
复制代码
本文发布于:2024-02-02 13:49:57,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170685299844220.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |