Devalor
Devalor

Reputation: 55

jquery $.extend recursive deep copy

How to know what the first param in $.extend does? It says deep copy but what does it means?

I try it but it doesn't shows any different in the result

http://jsfiddle.net/rvbrw0p9/

$(document).ready(function() {
 var object1 = { a: 1, b: 2, c: 3 };
var object2 = { a: 'a', b: 2, c: 'c'};

var r = $.extend(object1 , object2 );
var r2 = $.extend(true, object1 , object2 );

console.log(r);
console.log(r2);
});

Upvotes: 1

Views: 1912

Answers (1)

Tyler
Tyler

Reputation: 674

Technically there is no different from r and r2.

But please take note on the $.extend() behaviour http://api.jquery.com/jQuery.extend/

NOTE 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'}

NOTE 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}

NOTE 3 What happen if we pass False or {} as first param.

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}

From the above example we can see True deep copy will update target value accordingly by other objectN value

Upvotes: 5

Related Questions