实现
对象的拷贝、数组的拷贝:JSON.parse() 、JSON.stringify() 的使用
// 功能相当于对象的拷贝
var a = [1, 3, 2]
var b = JSON.parse(JSON.stringify(a)) // 将a 的内容复制给b b的改变不会影响a(深拷贝)
代码
function deepClone(oldArray, newArray) {
var obj = newArray || {};
/*
for ... in 语句的使用
既可以用来遍历数组、又可以遍历Object对象
参数 :当遍历数组时,i 是 元素的下标;当遍历Object对象时,i 是 key值
*/
for (var i in oldArray) {
// 判断 是引用类型还是基本类型
if (typeof oldArray[i] === 'object') {
/*
variate.constructor 返回变量的类型
类型如下:
function Number() {...} # Number对象
function String() {...} # String对象
function Object() {...} # Object 对象
function Array() {...} # Array 对象 数组对象
function Function() {...} # Function 对象 函数对象
function RegExp() {...} # RegExp 对象 正则表达式对象
*/
obj[i] = (oldArray[i].constructor === Array) ? [] : {}
// arguments.callee 指向当前的函数 function deepClone(oldArray, newArray) {...}
arguments.callee(oldArray[i], obj[i])
} else {
obj[i] = oldArray[i]
}
}
return obj;
}