aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrenton2013-06-01 23:29:18 -0700
committerJeff Cross2013-07-24 10:58:56 -0700
commit1dcafd18afed4465ee13db91cedc8fecc3aa2c96 (patch)
tree5f6cb7c53c4606072637a529df44046c4369821a
parent4a7b6a4555a76b19dd217171fc0ddce6707bca95 (diff)
downloadangular.js-1dcafd18afed4465ee13db91cedc8fecc3aa2c96.tar.bz2
fix(equals): {} and [] should not be considered equivalent
angular.equals was returning inconsistent values for the comparison between {} and []: angular.equals({}, []) // true angular.equals([], {}]) // false Since these object are not of the same type, they should not be considered equivalent.
-rw-r--r--src/Angular.js3
-rw-r--r--test/AngularSpec.js5
2 files changed, 7 insertions, 1 deletions
diff --git a/src/Angular.js b/src/Angular.js
index a41ef4e8..4e050a0c 100644
--- a/src/Angular.js
+++ b/src/Angular.js
@@ -687,6 +687,7 @@ function equals(o1, o2) {
if (t1 == t2) {
if (t1 == 'object') {
if (isArray(o1)) {
+ if (!isArray(o2)) return false;
if ((length = o1.length) == o2.length) {
for(key=0; key<length; key++) {
if (!equals(o1[key], o2[key])) return false;
@@ -698,7 +699,7 @@ function equals(o1, o2) {
} else if (isRegExp(o1) && isRegExp(o2)) {
return o1.toString() == o2.toString();
} else {
- if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2)) return false;
+ if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;
keySet = {};
for(key in o1) {
if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
diff --git a/test/AngularSpec.js b/test/AngularSpec.js
index b43edf1c..a58b8109 100644
--- a/test/AngularSpec.js
+++ b/test/AngularSpec.js
@@ -289,6 +289,11 @@ describe('angular', function() {
expect(equals(/^abc/, /abc/)).toBe(false);
expect(equals(/^abc/, '/^abc/')).toBe(false);
});
+
+ it('should return false when comparing an object and an array', function() {
+ expect(equals({}, [])).toBe(false);
+ expect(equals([], {})).toBe(false);
+ });
});
describe('size', function() {