文章目录
深浅拷贝(引用数据类型)
浅拷贝 (传的是地址)
会改变原数组的值
var arr = [1, 2, 3];
var arr_1 = arr
arr_1.push(4)
console.log(arr, arr_1);
//会改变原数组的值
clone()
protected Object clone()
使用clone方法的类必须实现Cloneable接口,否则会抛出异常
深拷贝数组 (传的值,不会改变原数组)
使用数组遍历赋值(forEach())
var arr_1 = [1, 2, 3];
var arr_2 = [];
arr_1.forEach(function (value, index) {
arr_2[index] = value;
})
arr_1[0] = 3
console.log(arr_1, arr_2);
使用数组map方法
var arr_1 = [1, 2, 3, 4];
var arr_2 = arr_1.map(function (value) {
return value;
})
arr_2.push(5)
console.log(arr_1, arr_2);
ES6语法
var arr_1 = [1, 2, 3, 4, 5];
var [...arr_2] = arr_1;
arr_2.push(6)
console.log(arr_1, arr_2);
for循环
var arr_2 = [1, 2, 3]
var arr_3 = []
for (var i = 0; i < arr_2.length; i++) {
arr_3.push(arr_2[i])
}
arr_3.unshift(0)
console.log(arr_2, arr_3);
//不会改变原数组的值
slice()
var arr_4 = [1, 2, 3]
var arr_5 = arr_4.slice(0)
arr_5.push(4)
console.log(arr_4, arr_5);
concat()
var arr_6 = [1, 2, 3]
var arr_7 = arr_6.concat()
arr_7.shift()
console.log(arr_6, arr_7);
深拷贝对象(不会改变原对象)
for in
var obj_1 = {
name: 'name',
age: 18
}
var obj_2 = {}
for (x in obj_1) {
obj_2[x] = obj_1[x]
}
obj_2.name = 'name1'
console.log(obj_1, obj_2);
通过JSON.stringify()和JSON.parse()将对象转为字符串之后在转为对象
var obj_1 = { name: 'name' };
var obj_2 = JSON.parse(JSON.stringify(obj_1))
obj_2.age = 18
console.log(obj_1, obj_2);
使用拓展运算符+解构赋值
var obj_1 = { name: 'name', age: 18 };
var obj_2 = { ...obj_1 }
obj_1.sex = '男'
console.log(obj_1, obj_2);
使用对象的合并,即通过Object.assign()方法
var obj_1 = { name: 'name', age: 18 };
var obj_2 = Object.assign({}, obj_1);
console.log(obj_1, obj_2);