1. 程式人生 > >js 對象的淺拷貝和深拷貝

js 對象的淺拷貝和深拷貝

tex bject script cnblogs ons assign 對象 而已 obj

//淺拷貝,拷貝內存塊,拷貝部門代碼不共存
var obj = {
	a  :  "a",
	b  :  "b",
	c  :  {
		text :  "這是一個文本"
	}
}

var copy = obj;

copy.a = "copy";
console.log(obj.a)// "copy",可以看到這裏的淺拷貝,會修改到原先的數據,因為淺拷貝是拷貝同一塊內存塊

//es6有Object.assign()方法用於深度拷貝,不過只是一級深度拷貝
var obj = {
	a  :  "a",
	b  :  "b",
	c  :  {
		text :  "這是一個文本"
	}
}

var assigncopy = Object.assign({}, obj);
assigncopy.a="assigncopy";
assigncopy.c.text = "assigncopytext";
console.log(obj.a) // "a"
console.log(obj.c.text) // "assigncopytext", 說明只是一級深度拷貝而已,用時要小心

//深度拷貝對象,一般都能滿足
var obj = {
	a  :  "a",
	b  :  "b",
	c  :  {
		text :  "這是一個文本"
	}
}
var stringcopy = JSON.parse(JSON.stringify(obj));
stringcopy.c.text = "stringcopytext";
console.log(obj.c.text);//"這是一個文本"

js 對象的淺拷貝和深拷貝