JavaScript深拷贝的解决办法
内容摘要
这篇文章主要为大家详细介绍了JavaScript深拷贝的简单示例,具有一定的参考价值,可以用来参考一下。
深拷贝使用变量 a 拷贝对象 b,改变 a 中的值 b 中的值也会跟着改变,这叫做
深拷贝使用变量 a 拷贝对象 b,改变 a 中的值 b 中的值也会跟着改变,这叫做
文章正文
这篇文章主要为大家详细介绍了JavaScript深拷贝的简单示例,具有一定的参考价值,可以用来参考一下。
深拷贝使用变量 a 拷贝对象 b,改变 a 中的值 b 中的值也会跟着改变,这叫做浅拷贝。要想让 a 独立于 b 就需要深拷贝简易处理
function deepClone() {
return JSON.parse(JSON.stringify(obj))
}
既然是简易处理就有他的不足,上面主要是用了 JSON 的序列化和反序列化。而 JSON 是不支持函数和 undefined 的因此碰到这些情况会缺失,但是已经能够满足大部分情况了复杂处理复杂处理就需要采用递归的方式了
function deepClone(obj) {
function isClass(o) {
if (o === null) return "Null";
if (o === undefined) return "Undefined";
return Object.prototype.toString.call(o).slice(8, -1);
}
var result;
var oClass = isClass(obj);
if (oClass === "Object") {
result = {};
} else if (oClass === "Array") {
result = [];
} else {
return obj;
}
for (var key in obj) {
var copy = obj[key];
if (isClass(copy) == "Object") {
result[key] = arguments.callee(copy);//递归调用
} else if (isClass(copy) == "Array") {
result[key] = arguments.callee(copy);
} else {
result[key] = obj[key];
}
}
return result;
}
注:关于JavaScript深拷贝的简单示例的内容就先介绍到这里,更多相关文章的可以留意
代码注释