1.任意俩个值进行比较的方法封装(===)-值和类型相等
function valueEquals (a, b) {
//两个变量相等-基本类型的比较
if (a === b) return true;
//数组的比较-比较相应索引对应的基本类型的值的比较
if (!(a instanceof Array)) return false;
if (!(b instanceof Array)) return false;
if (a.length !== b.length) return false;
for (let i = 0; i !== a.length; ++i) {
if (a[i] !== b[i]) return false;
}
return true;
}
2.任意俩个值进行比较的方法封装(==)-值相等
//判断是否是纯粹的对象,前面有封装
function isObject(obj) {
return Object.prototype.toString.call(obj) === '[object Object]';
}
//松散比较
function looseEqual (a, b) {
const isObjectA = isObject(a);
const isObjectB = isObject(b);
if (isObjectA && isObjectB) {
return JSON.stringify(a) === JSON.stringify(b);
} else if (!isObjectA && !isObjectB) {
return String(a) === String(b);
} else {
return false;
}
};
//俩个数组的比较
function arrayEquals (arrayA, arrayB) {
arrayA = arrayA || [];
arrayB = arrayB || [];
if (arrayA.length !== arrayB.length) {
return false;
}
for (let i = 0; i < arrayA.length; i++) {
if (!looseEqual(arrayA[i], arrayB[i])) {
return false;
}
}
return true;
};
//俩个变量的比较
function isEqual (value1, value2) {
//数组
if (Array.isArray(value1) && Array.isArray(value2)) {
return arrayEquals(value1, value2);
}
//非数组
return looseEqual(value1, value2);
};
/*严格比较*/
valueEquals(1, 1)
//true
valueEquals(1, "1")
//false
valueEquals([1, 2], [1, 2])
//true
/*松散比较*/
isEqual(1, "1")
//true
//松散也是相对的只是针对数组内的基本类型,引用类型除外
isEqual([{1: 1}], [{1: "1"}])
//false
isEqual([{1: "1"}], [{1: "1"}])
//true
//如果是对象比较也是严格比较
isEqual({1: "1"}, {1: "1"})
//true
isEqual({1: 1}, {1: "1"})
//false
//需要注意,不过此类比较很少用到,了解即可