From 6817c89133d8c6cd38ac5245dd94af98578f45e6 Mon Sep 17 00:00:00 2001 From: Caitlin Potter Date: Wed, 20 Aug 2014 21:22:19 -0400 Subject: [PATCH] fix(copy): clear array destinations correctly for non-array sources Closes #8610 --- src/Angular.js | 1 + test/AngularSpec.js | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/Angular.js b/src/Angular.js index 1a17f73d01a2..593c6e4fa4b1 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -803,6 +803,7 @@ function copy(source, destination, stackSource, stackDest) { forEach(destination, function(value, key) { delete destination[key]; }); + if (isArray(destination)) destination.length = 0; for ( var key in source) { if(source.hasOwnProperty(key)) { result = copy(source[key], null, stackSource, stackDest); diff --git a/test/AngularSpec.js b/test/AngularSpec.js index 72299380688a..8a8bd1ca845f 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -184,6 +184,12 @@ describe('angular', function() { expect(aCopy).toBe(aCopy.self); expect(aCopy.selfs[2]).not.toBe(a.selfs[2]); }); + + it('should clear destination arrays correctly when source is non-array', function() { + expect(copy(null, [1,2,3])).toEqual([]); + expect(copy(undefined, [1,2,3])).toEqual([]); + expect(copy({0: 1, 1: 2}, [1,2,3])).toEqual([1,2]); + }); }); describe("extend", function() {