天天看點

javascript—— JS 深拷貝與淺拷貝方法總結

<script>
	var arr1 = [1,2,3,{a:4}];
	var arr2 = [];
	//淺拷貝
	function shallowCopy(a1, a2){
		a2 = a1;
	}
	//普通元素為深拷貝,對象為淺拷貝
	function copy(a1, a2){
		//a2 = a1.slice();//第一種
		//a2 = a1.concat();//第二種
		//a2 = [...a1];//第三種
		a2 = Array.from(a1);;//第四種
	}
	//深拷貝
	function deepCopy(a1, a2){
		// 取出第一個對象的每一個屬性
		for(var key in a1){
			// 取出第一個對象目前屬性對應的值
			var item = a1[key];
			// 判斷目前的值是否是引用類型
			// 如果是引用類型, 我們就重新開辟一塊存儲空間
			if(item instanceof Object){
				var temp = new Object();
				deepCopy(item, temp);   //遞歸
				a2[key] = temp;
			}else{
				// 基本資料類型
				a2[key] = a1[key];
			}
		}
	}
	// shallowCopy(arr1,arr2);//淺拷貝
	// copy(arr1,arr2);
	deepCopy(arr1,arr2);//深拷貝
	arr1[0] = 9;
	arr1[3].a = 10;
	console.log(arr1); //[9,2,3,{a:10}];
	console.log(arr2); //[1,2,3,{a:4}];
</script>
           

繼續閱讀