📅  最后修改于: 2023-12-03 15:11:05.159000             🧑  作者: Mango
_.clone()
方法是 lodash 库的一个方法,用于生成一个深拷贝的对象副本。该方法可以将一个对象的所有属性和其嵌套的属性都复制到一个新创建的对象中,从而得到一个完全独立的对象,与原对象没有任何关系。
与 JavaScript 原生的 Object.assign()
方法不同,_.clone()
方法能够递归地复制所有嵌套的对象属性,并且能够正确处理内置对象(如 Date、RegExp 等)和自定义类实例。
_.clone(value)
value
(*):要克隆的值。一个克隆的对象。
const obj = {
name: "Tom",
age: 30,
address: {
city: "Beijing",
street: "Chaoyang"
}
};
const clonedObj = _.clone(obj);
console.log(clonedObj); // { name: 'Tom', age: 30, address: { city: 'Beijing', street: 'Chaoyang' } }
// 修改原始对象
obj.address.city = "Shanghai";
console.log(clonedObj); // { name: 'Tom', age: 30, address: { city: 'Beijing', street: 'Chaoyang' } }
const original = [1, 2, 3, [4, 5]];
const cloned = _.clone(original);
console.log(cloned); // [ 1, 2, 3, [ 4, 5 ] ]
// 修改原始数组
original[3][0] = "changed";
console.log(cloned); // [ 1, 2, 3, [ 'changed', 5 ] ]
const originalDate = new Date("2022-01-01");
const clonedDate = _.clone(originalDate);
console.log(clonedDate); // 2022-01-01T00:00:00.000Z
// 修改原始日期对象
originalDate.setFullYear(2023);
console.log(clonedDate); // 2022-01-01T00:00:00.000Z
const originalRegExp = /\w+/gi;
const clonedRegExp = _.clone(originalRegExp);
console.log(clonedRegExp); // /\w+/gi
// 修改原始正则表达式对象
originalRegExp.test("abc");
console.log(clonedRegExp); // /\w+/gi
value
不是对象或数组,则直接返回 value
。_.clone()
方法没有递归保护,即如果对象中包含循环引用,则会导致无限递归。_.cloneDeep()
方法是 _.clone()
方法的改进版,不仅可以深拷贝对象,还可以深拷贝对象中包含的函数等其他类型。