在 JavaScript 中,可以使用浅拷贝和深拷贝来复制对象或数组。下面我会介绍几种常用的方法:
浅拷贝:
- 使用展开运算符(…):
var shallowCopy = [...originalArray]或var shallowCopy = {...originalObject} - 使用Array.from() 方法:
var shallowCopy = Array.from(originalArray) - 使用 Object.assign() 方法:
var shallowCopy = Object.assign({}, originalObject)
- 使用展开运算符(…):
深拷贝:
- 手动递归复制对象或数组的每个属性,并创建新的副本。
- 使用 JSON.parse(JSON.stringify()) 方法进行序列化和反序列化,但这种方法有一些限制,比如不能处理循环引用和函数。
以下是示例代码演示上述方法:
// 浅拷贝示例
var originalArray = [1, 2, 3];
var shallowCopy = [...originalArray]; // 或 var shallowCopy = Array.from(originalArray);
console.log(shallowCopy); // 输出: [1, 2, 3]
var originalObject = { name: "Alice", age: 25 };
var shallowCopy = { ...originalObject }; // 或 var shallowCopy = Object.assign({}, originalObject);
console.log(shallowCopy); // 输出: { name: "Alice", age: 25 }
// 深拷贝示例
function deepClone(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj; // 如果是基本类型或 null,则直接返回
}
var clone;
if (Array.isArray(obj)) {
clone = []; // 如果是数组,则创建一个新的空数组
for (var i = 0; i < obj.length; i++) {
clone.push(deepClone(obj[i])); // 递归复制每个元素
}
} else {
clone = {}; // 如果是对象,则创建一个新的空对象
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
clone[key] = deepClone(obj[key]); // 递归复制每个属性
}
}
}
return clone;
}
var originalArray = [1, [2, 3], { name: "Alice" }];
var deepCopyArray = deepClone(originalArray);
console.log(deepCopyArray); // 输出: [1, [2, 3], { name: "Alice" }]
var originalObject = { name: "Alice", hobbies: ["coding", "reading"] };
var deepCopyObject = deepClone(originalObject);
console.log(deepCopyObject); // 输出: { name: "Alice", hobbies: ["coding", "reading"] }
这些方法都有各自的特点和用途,根据实际情况选择合适的方式来进行拷贝。
内容由零声教学AI助手提供,问题来源于学员提问




