| .. | 和原數(shù)據(jù)是否指向同一對象 | 第一層數(shù)據(jù)類型為基本數(shù)據(jù)類型 | 原數(shù)據(jù)中包含子對象 |
|---|---|---|---|
| 賦值 | 是 | 改變會(huì)使原數(shù)據(jù)一同改變 | 改變會(huì)使原數(shù)據(jù)一同改變 |
| 淺拷貝 | 否 | 改變不會(huì)使原數(shù)據(jù)一同改變 | 改變會(huì)使原數(shù)據(jù)一同改變 |
| 深拷貝 | 否 | 改變不會(huì)使原數(shù)據(jù)一同改變 | 改變不會(huì)使原數(shù)據(jù)一同改變 |
深拷貝:將 B 對象拷貝到 A 對象中,包括 B 里面的子對象,
淺拷貝:將 B 對象拷貝到 A 對象中,但不包括 B 里面的子對象
var obj1 = {
'name' : 'zhangsan',
'age' : '18',
'language' : [1,[2,3],[4,5]],
};
var obj2 = obj1;
var obj3 = shallowCopy(obj1);
function shallowCopy(src) {
var dst = {};
for (var prop in src) {
if (src.hasOwnProperty(prop)) {
dst[prop] = src[prop];
}
}
return dst;
}
obj2.name = "lisi";
obj3.age = "20";
obj2.language[1] = ["二","三"];
obj3.language[2] = ["四","五"];
console.log(obj1);
//obj1 = {
// 'name' : 'lisi',
// 'age' : '18',
// 'language' : [1,["二","三"],["四","五"]],
//};
console.log(obj2);
//obj2 = {
// 'name' : 'lisi',
// 'age' : '18',
// 'language' : [1,["二","三"],["四","五"]],
//};
console.log(obj3);
//obj3 = {
// 'name' : 'zhangsan',
// 'age' : '20',
// 'language' : [1,["二","三"],["四","五"]],
//};