Я думаю, что вы должны сделать:
var b = jQuery.extend(true, {}, a);
Fiddle здесь http://jsfiddle.net/M48tr/1/
это потому, что свойство является массивом и вам нужен глубокий клон.Как написано в документации:
Слияние, выполняемое $ .extend (), не является рекурсивным по умолчанию;если свойство первого объекта само является объектом или массивом, оно будет полностью перезаписано свойством с тем же ключом во втором объекте. Значения не объединяются. Однако, передавая true для первого аргумента функции, объекты будутбыть рекурсивно объединенным.
Если вы не делаете глубокое копирование, b['herp']
просто содержит ссылку на массив, который находится в a['herp']
Вещи разные, еслисвойства не являются массивами или объектами, как в этом примере:
a={};
a['herp']='derp';
var b = jQuery.extend({}, a);
b['herp'] = 'foo';
alert(a['herp']);//alerts derp
alert(b['herp']);//alerts foo
скрипка здесь http://jsfiddle.net/M48tr/2