js 深度拷贝(最基本的面试题)

159 阅读1分钟

重点:递归、isArray、typeof、hasOwnProperty

let target = [ '123', 1, null, [1,2], {name: 'a'}, function a(){ return 1; }, [{a: 1}] ];
	// 深度拷贝
	function deepClone(obj){
		let newObj = Array.isArray(obj) ? [] : {}; // 数组或者对象
		if(obj && typeof(obj) === 'object'){  // objec,证明对象里还有对象,null也是objec,记得排除
			for(k in obj){
				if (obj.hasOwnProperty(k)){
					console.log(k);
					// 再判断obj[key]是不是对象
					if (obj && typeof(obj[k]) === 'object') {  // 是的话证明有对象
						newObj[k] = deepClone(obj[k])
					}else {
						newObj[k] = obj[k]; 
					}
					
					// 三元表达式
					newObj[k] = (obj && typeof(obj[k]) === 'object') ? deepClone(obj[k]) : obj[k];
				}
			}
		}   
		return newObj;
	};
let i = deepClone(target);
console.log('最终的结果',i);

判断条件很关键,因为要使用递归,一定要考虑判断数组里有数字或者对象的情况 js基础较差,马上加强