mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
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.
This commit is contained in:
parent
4a7b6a4555
commit
1dcafd18af
2 changed files with 7 additions and 1 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue