javascript - jQuery - $.extend deep loses reference to array -


i have observed odd issue in jquery's $.extend method , referencing array (which considered object in javascript).

i use defaults object, defined follows:

var defaults = {     numbers: [] }; 

i have config option pass function, defined follows:

var config = {     numbers: [1, 2, 3] }; 

within function, extend these 2 (using deep $.extend):

function configure(settings) {     var nums = $.extend(true, {}, defaults, settings);      nums.numbers.push(4);      console.log(settings, nums); }  configure(config); 

when log these two, results follows:

settings: {"numbers":[1,2,3]} nums: {"numbers":[1,2,3,4]} 

what failing understand is, jquery merges objects left right.

i expect since settings last object extended, numbers array that's created in nums reference settings.numbers (since settings last object $.extended). not case (as can see when log final results).

can please explain why? cause of difficult find bug in app want ensure understand not happen again.

you made deep merge:

on deep extend, object , array extended

the target object first object after deep boolean.

in case, it's {} , nums because of assignation.

settings isn't target object. numbers array therefore not 1 of nums.


Comments

Popular posts from this blog

Magento/PHP - Get phones on all members in a customer group -

php - Bypass Geo Redirect for specific directories -

php - .htaccess mod_rewrite for dynamic url which has domain names -