function a() {
var a = [1, 2, 3, 4, 5];
var s = a;
var d = a[2];
console.log(s);
console.log(d);
s[0] = 6;
d = 7;
console.log(s);
console.log(d);
console.log(a);
}
// 使用for...in..实现浅拷贝
function s() {
// 原对象,【堆中】
var _data = {
id: 1,
num: 10,
list: {
id: 1,
num: 1
}
};
var _newData = {}; //新创建一个对象,【栈中】
// 使用for...in...进行拷贝操作
for (var i in _data) {
_newData[i] = _data[i];
}
// 对浅拷贝的新对象做操作
_newData.id = 2;
_newData.list.id = 2;
console.log('_data值:', _data)
console.log('_newData值:', _newData)
// 输出
// _data值:,{"id":1,"num":10,"list":{"id":2,"num":1}}
// _newData值:,{"id":2,"num":10,"list":{"id":2,"num":1}}
}
// 使用Object.assign()实现浅拷贝
function d() {
// 原对象,【堆中】
var _data = {
id: 1,
num: 10,
list: {
id: 1,
num: 1
}
};
var _newData = {}; //新创建一个对象,【栈中】
// 使用Object.assign(新对象,需要拷贝的对象)进行拷贝操作
Object.assign(_newData, _data)
// 对浅拷贝的新对象做操作
_newData.id = 2;
_newData.list.id = 2;
console.log('_data值:', _data)
console.log('_newData值:', _newData)
// 输出
// _data值:,{"id":1,"num":10,"list":{"id":2,"num":1}}
// _newData值:,{"id":2,"num":10,"list":{"id":2,"num":1}}
}
// 使用JSON.stringify()进行深拷贝
function f() {
// 原对象,【堆中】
var _data = {
id: 1,
num: 10,
list: {
id: 1,
num: 1
}
};
var _newDataStr = JSON.stringify(_data),
_newData = JSON.parse(_newDataStr);
// 对浅拷贝的新对象做操作
_newData.id = 2;
_newData.list.id = 2;
console.log('_data值:', _data)
console.log('_newData值:', _newData)
// 输出
// _data值:,{"id":1,"num":10,"list":{"id":1,"num":1}}
// _newData值:,{"id":2,"num":10,"list":{"id":2,"num":1}}
}
// 使用递归的方式进行深拷贝
function g(data) {
// 首先判断data是基本数据类型还是引用数据类型,如果是基本直接返回
if (typeof data != "object") {
return data
}
// 根据是数组还是对象进行新建变量
var _newData = Array.isArray(data) ? [] : {};
// 判断是数组还是对象
if (data instanceof Array) {
console.log("是数组")
// 数组
for (var i = 0; i < data.length; i++) {
_newData[i] = data[i]
if (typeof _newData[i] == 'object') {
g(_newData[i]);
}
}
} else {
console.log("是对象")
// 对象
for (var i in data) {
// 判断对象里面是否有数组或者对象
if (typeof data[i] == 'object') {
_newData[i] = g(data[i])
} else {
_newData[i] = data[i]
}
}
}
return _newData
}
console.log(g({ a: 1, s: 2, d: [1, 2, 3] }))
console