方法:
function looseEqual(a, b) {
if (a === b) { return true }
var isObject = function (obj) {
return obj !== null && typeof obj === 'object'
};
var isObjectA = isObject(a),
isObjectB = isObject(b);
if (isObjectA && isObjectB) {
try {
var isArrayA = Array.isArray(a),
isArrayB = Array.isArray(b);
if (isArrayA && isArrayB) {
return a.length === b.length && a.every(function (e, i) {
return looseEqual(e, b[i])
})
} else if (!isArrayA && !isArrayB) {
var keysA = Object.keys(a),
keysB = Object.keys(b);
return keysA.length === keysB.length && keysA.every(function (key) {
return looseEqual(a[key], b[key])
})
} else {
return false
}
} catch (e) {
return false
}
} else if (!isObjectA && !isObjectB) {
if (typeof a === 'number' || typeof b === 'number') {
return a === b
} else {
return String(a) === String(b)
}
} else {
return false;
}
}
测试:
1. looseEqual(1,'1')
结果:false
2. looseEqual({a:1},{a:1})
结果:true