1 var hasOwn = require('./hasOwn');
2 var deepClone = require('../lang/deepClone');
3 var isObject = require('../lang/isObject');
10 key, val, obj, target;
12 // make sure we don't modify source element and it's properties
13 // objects are passed by reference
14 target = deepClone( arguments[0] );
16 while (obj = arguments[i++]) {
18 if ( ! hasOwn(obj, key) ) {
24 if ( isObject(val) && isObject(target[key]) ){
25 // inception, deep merge objects
26 target[key] = merge(target[key], val);
28 // make sure arrays, regexp, date, objects are cloned
29 target[key] = deepClone(val);
38 module.exports = merge;