js对数据深度克隆的方法
要知道如果是引用数据的话普通的将值传给变量只是传了一个新地址,指向的还是原本栈的数据,如果修改任意一个都会改变栈中的原本数据,所以需要用到深度克隆。
1. 首先创建一个可以传入数据的函数.
2. 函数内先对传入数据的类型运用typeof()进行初步判断,判断出原始数据和引用类型数据.
3. 从引用数据中运用Array.array()的方法判断是否为数组,如果是数组便遍历这个数组,让遍历的每个下标对映的值传入一个新的空的数组中。如果是对象的话用 for in遍历对象将对象中每个的属性对应的值传入其中(result[i] = x[i])最后返回这个结果。
4. 如果是原始数据就直接拿一个新变量赋予值既可以返回。
function kelong(x) {
if (typeof (x) == 'object') {
//如果是引用数据类型
if (Array.isArray(x) == true) {
for (var i = 0, result = []; i < x.length; i++) {
result.push(arr[i])
}
return result;
} else {
var result = {};
for (var i in x) {
result[i] = x[i];
}
return result;
}
//如果原始数据类型
} else {
var result = x;
return result;
}
}
//对象测试
var obj = {
name: 123,
age: 123456,
}
var obj2 = kelong(obj);
obj.change = 321;
console.log(obj, obj2);
//数组测试
var arr = [1, 2, 3, {
width: "123"
}];
var arr2 = kelong(arr);
arr.push(12345);
console.log(arr, arr2);
//原始数据number测试
var num = 12345;
num2 = kelong(num);
num += 2;
console.log(num,num2)