function isEqual(a, b) {
var ret = false,
i;
var t1, t2;
if(a === b || (a !== a && b !== b)) {
ret = true;
} else if(typeof a == 'object' && typeof b == 'object') {
t1 = Object.keys(a);
t2 = Object.keys(b);
if (t1.length == t2.length) {
for (i in a) {
if (isEqual(a[i], b[i])) {
ret = true;
} else {
ret = false;
break;
}
}
}
}
return ret;
}
// 测试用函数
function assert(result, want) {
if(result == want) {
console.log('SUCEESS')
} else
console.warn('FAIL', 'Got: ' + result, 'Want: ' + want)
}
// 测试case
assert( isEqual('1', '1'), true);
assert( isEqual(NaN, NaN), true);
assert( isEqual([1,2,3,4,5], [1,2,3,4,5]), true);
assert( isEqual([
{a: 1, b: 2},
2
], [
{a: 1, b: 2},
2
]), true);
assert( isEqual({
a: 1, b: 2, c: [1,2,3]
}, {
a: 1, b: 2, c: [1,2,3]
}), true);
assert( isEqual({
a: 1, b: 2, c: [1,2,3, {a: 1}]
}, {
a: 1, b: 2, c: [1,2,3, {a: 1}]
}), true);