1.基本数据类型 -- 指向即clone
var num = 1000;
var cloneNum = num;
num = 999;
console.log( cloneNum ) // 1000
2.非基本数据类型 -- 指向是引用 用方法实现clone
错误方式
var arr = [1,2,3];
var cloneArr = arr;
arr[0] = 99;//注意这里只是改变arr中的一个值
console.log( cloneArr ) // [99, 2, 3]
//扩展 注意理解引用
arr = ["a","b","c"]; //arr指向新的存储空间
console.log( cloneArr ) // [99, 2, 3]
解决方法
var clone = function( obj ){
var o;
if( typeof obj === "object" ){
if ( obj === null ) {
o = null;
}else if ( obj instanceof Array ) {
o = [];
for (var i = 0; i < obj.length; i++) {
o.push( clone( obj[i] ) ); //**确保数组内的任何类型数据均能被正确的clone
};
}else{
o = {}
for ( var j in obj ) {
o[j] = clone( obj( j ) )
};
}
}else{
o = obj;
}
return o;
}
var cloneObj = clone([null,[1,2,3],"99",100]);
cloneObj //[null, Array[3], "99", 100]
3.其他 dom节点克隆
var mainDom = document.getElementById('main');
var cloneMain = mainDom.cloneNode();
var cloneMainDeep = mainDom.cloneNode( true ); //深度克隆 包括其子节点
网友评论