function deepCopy(p,c){ var c = c || {}; for ( var i in p ){ //确保属于自己的属性 if ( p.hasOwnProperty( i ) ){ //判断属性是否为对象 if ( typeof p[i] === 'object' ){ //ES3没有isArray()方法,兼容写法 if (typeof Array.isArray !== 'function' ){ Array.isArray = function( candidate ){ return Object.prototype.toString.call( candidate ) === '[object Array]'; } //如果是数组创建新数组,如果不是创建新对象 c[i] = Array.isArray( p[i] ) ? [] : {}; }else { c[i] = Array.isArray( p[i] ) ? [] : {}; } //通过递归,进行再一次遍历,直到typeof p[i]不是对象,然后逐层返回 deepCopy(p[i], c[i]); }else { c[i] = p[i]; } } } return c; };