jquery $ .extend递归深层复制

时间:2016-12-08 03:29:55

标签: javascript jquery

如何知道$ .extend中的第一个参数是什么?它说深刻的副本,但它意味着什么?

我尝试了,但结果中没有显示任何不同

http://jsfiddle.net/rvbrw0p9/

{{1}}

1 个答案:

答案 0 :(得分:2)

从技术上讲,与r和r2没有区别。

但请注意$ .extend()行为 http://api.jquery.com/jQuery.extend/

  

注1 jQuery.extend(target [,object1] [,objectN])

var r = $.extend(object1 , object2 );
// mean now we merge object2 into object1 so object1={ a: 'a', b: 2, c: 'c'}
console.log(object1) // return  { a: 'a', b: 2, c: 'c'}
console.log(r) // return  { a: 'a', b: 2, c: 'c'}
  

注2 jQuery.extend([deep],target,object1 [,objectN])

var objA = { k: 1, b: 2};
var objB = { k: 2, b: 'b', z:9};
var ret = $.extend(true, objA, objB); // when true as first parameter = merge recursive (deep copy) 
console.log(objA); // return { k: 2, b: 'b', z:9}
console.log(ret); // return { k: 2, b: 'b', z:9}
  

注3 如果我们将False或{}作为第一个参数传递会发生什么。

var objA = { k: 1, b: 2};
var objB = { k: 2, b: 'b', z:9};
var ret = $.extend(false, objA, objB);
console.log(objA) // return { k: 1, b: 2}
console.log(ret) // return { k: 2, b: 'b', z:9}

从上面的示例中,我们可以看到真正的深层复制会相应地通过其他 objectN 值更新目标