浅拷贝与深拷贝

判定一个对象属于那种类型的值:
Object.prototype.toString()判断内建类型对象和客户端类型对象

对象的拷贝:
浅拷贝(对于一个引用类型,如果直接将它赋值给另一个变量,由于这两个引用指向同一个地址,这时改变其中任何一个引用,另一个都会受到影响): 1.直接赋值登录 2.Object.assign({},obj)3.$.extend(false,{},obj)
深拷贝(对于一个引用类型,如果直接将它赋值给另一个变量,由于这两个引用指向同一个地址,这时改变其中任何一个引用,另一个不会受到影响): 1.$.extend(true,{},obj) 2.JSON.parse(JSON.stringify(obj))
3.
//类型判断
function getType(obj){
//tostring会返回对应不同的标签的构造函数

var toString = Object.prototype.toString;

var map = {

'[object Boolean]' : 'boolean',

'[object Number]' : 'number',

'[object String]' : 'string',

'[object Function]' : 'function',

'[object Array]' : 'array',

'[object Date]' : 'date',

'[object RegExp]' : 'regExp',

'[object Undefined]': 'undefined',

'[object Null]' : 'null',

'[object Object]' : 'object'

};

if(obj instanceof Element) {

return 'element';

}

return map[toString.call(obj)];

}
//深拷贝
function deepClone(data){

var type = getType(data);

var obj;

if(type === 'array'){

obj = [];

} else if(type === 'object'){

obj = {};

} else {

//不再具有下一层次

return data;

}

if(type === 'array'){

for(var i = 0, len = data.length; i < len; i++){

obj.push(deepClone(data[i]));

}

} else if(type === 'object'){

for(var key in data){

obj[key] = deepClone(data[key]);

}

}

return obj;

}

原文地址:https://www.cnblogs.com/tutao1995/p/9777230.html