Js相等剖析
相等判定
四种算法,三种运算
IsLooselyEqual, 即==宽松相等. [类型转换,特殊处理(NaN, -0, +0)]IsStrictlyEqual, 即===严格相等. [特殊处理(NaN, -0, +0)]SameValue, 即Object.is()[无]SameValueZero, 被许多内置算法运用
宽松相等
严格相等
-
原始类型
- 不含 NaN, 值相等即可
- 含 NaN, 绝对不等
+0-00相等
-
对象,引用比较
-
indexOf,lastIndexOf使用的是严格相等
Object.is()
+0与0相等-0与0,+0都不相等 (区别于严格相等,SameValueZero)NaN与NaN相等 (区别于严格相等)
SameValueZero
NaN与NaN相等 (区别于严格相等)+0-00相等 (区别于Object.is)
数组相等
引用相等,用 ===
值相等
-
_.isEqualin Lodash 数据类型?顺序?重复元素? -
自定义
for循环比对, 比较方法使用=== Object.is
function arraysEqual(arr1, arr2) {
// 1.首先判断数组的长度是否相等
if (arr1.length !== arr2.length) {
return false;
}
//2. 如果不考虑顺序的话,先排序
//3. 如果不考虑重复,先去重
// 遍历每一个元素进行比较
for (let i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i]) {
return false;
}
}
return true;
}
// 示例用法
const array1 = [1, 2, 3];
const array2 = [1, 2, 3];
const array3 = [1, 2, 4];
console.log(arraysEqual(array1, array2)); // true
console.log(arraysEqual(array1, array3)); // false