diff --git a/lodash.js b/lodash.js index cb49c06d0..457a4ac80 100644 --- a/lodash.js +++ b/lodash.js @@ -2237,7 +2237,7 @@ if (isArr) { result = initCloneArray(value); if (!isDeep) { - result = copyArray(value, result); + return copyArray(value, result); } } else { var tag = getTag(value), @@ -2249,17 +2249,14 @@ } result = initCloneObject(isFunc ? {} : value); if (!isDeep) { - result = baseAssign(result, value); + return assignSymbols(baseAssign(result, value), value); } - } - else if (!cloneableTags[tag]) { - return object ? value : {}; - } - else { - result = initCloneByTag(value, tag, isDeep); + } else { + return cloneableTags[tag] + ? initCloneByTag(value, tag, isDeep) + : (object ? value : {}); } } - result = assignSymbols(result, value); if (!isDeep) { return result; } @@ -2275,7 +2272,7 @@ (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { assignValue(result, key, baseClone(subValue, isDeep, customizer, key, value, stack)); }); - return result; + return isArr ? result : assignSymbols(result, value); } /** diff --git a/test/test.js b/test/test.js index f3bb66e5c..7c0b772fc 100644 --- a/test/test.js +++ b/test/test.js @@ -2382,18 +2382,24 @@ }); QUnit.test('`_.' + methodName + '` should clone symbol properties', function(assert) { - assert.expect(1); + assert.expect(2); if (Symbol) { - var values = [[], Object(false), new Date, {}, Object(0), /a/, Object('a')]; + var object = {}; + object[symbol] = {}; + assert.strictEqual(func(object)[symbol], object[symbol]); - assert.ok(lodashStable.every(values, function(value) { - value[symbol] = {}; - return func(value)[symbol] === value[symbol]; - })); + if (isDeep) { + object = { 'a': { 'b': {} } }; + object.a.b[symbol] = {}; + assert.strictEqual(func(object).a.b[symbol], object.a.b[symbol]); + } + else { + skipTest(assert); + } } else { - skipTest(assert); + skipTest(assert, 2); } });