js深拷贝
深度克隆函数,用于创建给定值的深层副本。
支持基本数据类型(number, string, boolean, null, undefined)、Date对象、数组以及普通对象。
对于数组和对象,会递归地克隆其所有属性或元素,确保克隆的是深层次的独立副本。
/**
* 深度克隆函数,用于创建给定值的深层副本。
* 支持基本数据类型(number, string, boolean, null, undefined)、Date对象、数组以及普通对象。
* 对于数组和对象,会递归地克隆其所有属性或元素,确保克隆的是深层次的独立副本。
*
* @param {any} values 需要被深度克隆的值。
* @returns {any} 返回给定值的深层副本。
* @throws {Error} 如果传入值的类型不支持克隆,将抛出错误。
*/
function deepClone(values) {
var copy;
// 处理基本数据类型和null、undefined
if (null == values || 'object' != typeof values) return values;
// 处理Date对象
if (values instanceof Date) {
copy = new Date();
copy.setTime(values.getTime());
return copy;
}
// 处理数组
if (values instanceof Array) {
copy = [];
for (var i = 0, len = values.length; i < len; i++) {
copy[i] = deepClone(values[i]); // 注意:这里应使用函数名而非变量名
}
return copy;
}
// 处理普通对象
if (values instanceof Object) {
copy = {};
for (var attr in values) {
if (values.hasOwnProperty(attr)) copy[attr] = deepClone(values[attr]); // 同样,使用函数名
}
return copy;
}
throw new Error("Unable to copy values! Its type isn't supported.");
}