fix Ox.isEqual
This commit is contained in:
parent
c481889f3a
commit
12dcdf13fc
1 changed files with 26 additions and 20 deletions
|
@ -73,6 +73,10 @@ Ox.isElement = function(value) {
|
||||||
|
|
||||||
/*@
|
/*@
|
||||||
Ox.isEqual <function> Returns true if two values are equal
|
Ox.isEqual <function> Returns true if two values are equal
|
||||||
|
<script>
|
||||||
|
Ox.test.element = document.createElement('a');
|
||||||
|
Ox.test.fn = function() {};
|
||||||
|
</script>
|
||||||
> Ox.isEqual((function() { return arguments; }()), (function() { return arguments; }()))
|
> Ox.isEqual((function() { return arguments; }()), (function() { return arguments; }()))
|
||||||
true
|
true
|
||||||
> Ox.isEqual([1, 2, 3], [1, 2, 3])
|
> Ox.isEqual([1, 2, 3], [1, 2, 3])
|
||||||
|
@ -85,20 +89,24 @@ Ox.isEqual <function> Returns true if two values are equal
|
||||||
true
|
true
|
||||||
> Ox.isEqual(new Date(0), new Date(1))
|
> Ox.isEqual(new Date(0), new Date(1))
|
||||||
false
|
false
|
||||||
|
> Ox.isEqual(Ox.test.element, Ox.test.element)
|
||||||
|
true
|
||||||
> Ox.isEqual(document.createElement('a'), document.createElement('a'))
|
> Ox.isEqual(document.createElement('a'), document.createElement('a'))
|
||||||
true
|
|
||||||
> Ox.isEqual(document.createElement('a'), document.createElement('b'))
|
|
||||||
false
|
false
|
||||||
> Ox.isEqual(function(a) { return a; }, function(a) { return a; })
|
> Ox.isEqual(Ox.test.fn, Ox.test.fn)
|
||||||
true
|
true
|
||||||
> Ox.isEqual(function(a) { return a; }, function(b) { return b; })
|
> Ox.isEqual(function() {}, function() {})
|
||||||
false
|
false
|
||||||
> Ox.isEqual(Infinity, Infinity)
|
> Ox.isEqual(Infinity, Infinity)
|
||||||
true
|
true
|
||||||
> Ox.isEqual(-Infinity, Infinity)
|
> Ox.isEqual(Infinity, -Infinity)
|
||||||
false
|
false
|
||||||
> Ox.isEqual(NaN, NaN)
|
> Ox.isEqual(NaN, NaN)
|
||||||
false
|
false
|
||||||
|
> Ox.isEqual(null, null)
|
||||||
|
true
|
||||||
|
> Ox.isEqual(null, void 0)
|
||||||
|
false
|
||||||
> Ox.isEqual(0, 0)
|
> Ox.isEqual(0, 0)
|
||||||
true
|
true
|
||||||
> Ox.isEqual({}, {})
|
> Ox.isEqual({}, {})
|
||||||
|
@ -117,34 +125,32 @@ Ox.isEqual <function> Returns true if two values are equal
|
||||||
true
|
true
|
||||||
@*/
|
@*/
|
||||||
Ox.isEqual = function(a, b) {
|
Ox.isEqual = function(a, b) {
|
||||||
var isEqual = false, type = Ox.typeOf(a);
|
var ret = false, type = Ox.typeOf(a);
|
||||||
if (a === b) {
|
// 0 === -0, but not equal
|
||||||
isEqual = true;
|
if (a === b && (a !== 0 || 1 / a === 1 / b)) {
|
||||||
|
ret = true;
|
||||||
} else if (type == Ox.typeOf(b)) {
|
} else if (type == Ox.typeOf(b)) {
|
||||||
if (a == b) {
|
if (a == b) {
|
||||||
isEqual = true;
|
ret = true;
|
||||||
} else if (type == 'date') {
|
} else if (type == 'date') {
|
||||||
isEqual = a.getTime() == b.getTime();
|
ret = +a == +b;
|
||||||
} else if (type == 'element') {
|
} else if (type == 'element') {
|
||||||
isEqual = a.isEqualNode(b);
|
ret = a.isEqualNode(b);
|
||||||
} else if (type == 'function') {
|
|
||||||
// fixme: this doesn't do it
|
|
||||||
// isEqual = a.toString() == b.toString();
|
|
||||||
} else if (type == 'regexp') {
|
} else if (type == 'regexp') {
|
||||||
isEqual = a.global == b.global && a.ignore == b.ignore
|
ret = a.global == b.global && a.ignore == b.ignore
|
||||||
&& a.multiline == b.multiline && a.source == b.source;
|
&& a.multiline == b.multiline && a.source == b.source;
|
||||||
} else if (
|
} else if (
|
||||||
['arguments', 'array', 'object'].indexOf(type) > -1
|
['arguments', 'array', 'object'].indexOf(type) > -1
|
||||||
&& Ox.len(a) == Ox.len(b)
|
&& Ox.len(a) == Ox.len(b)
|
||||||
) {
|
) {
|
||||||
isEqual = true;
|
ret = true;
|
||||||
Ox.forEach(a, function(v, k) {
|
Ox.forEach(a, function(value, key) {
|
||||||
isEqual = Ox.isEqual(v, b[k]);
|
ret = Ox.isEqual(value, b[key]);
|
||||||
!isEqual && Ox.Break();
|
!ret && Ox.Break();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return isEqual;
|
return ret;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*@
|
/*@
|
||||||
|
|
Loading…
Reference in a new issue