JS实现深度对象合并

3,737 阅读1分钟

function extend() {  var extended = {};  var deep = false;  var i = 0;  // 判断是否为深拷贝  if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {    deep = arguments[0];    i++;//如果为深拷贝则初始的i为1或者为0  }   // 将对象属性合并到已存在的对象中  var merge = function(obj) {     for (var prop in obj) {        if (obj.hasOwnProperty(prop)) {           // 如果属性为对象并且需要深拷贝时则使用函数递归、反之则将当前的属性替换现有的属性           if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {            extended[prop] = extend(extended[prop], obj[prop]);           } else {            extended[prop] = obj[prop];           }      }    }  };   // 遍历所有对象属性  for (; i < arguments.length; i++) {  merge(arguments[i]);  }  return extended;} 示例:  1、extend({a:1,b:2,c:3},{a:2,d:5})简单拷贝  2、extend(true,{a:1,b:2,c:3},{a:2,d:5,b:{a:123}})简单拷贝