Skip to content

isEqual() function

ab 之间执行深度相等比较(deep equality comparison)。

不同于执行部分比较的 isMatch(source 只需匹配属性的子集),isEqual 要求双向完全相等:对象必须拥有相同的键集合,数组必须具有相同的长度和顺序,Map/Set 必须具有相同的大小。

支持的类型:原始值(NaN 视为等于 NaN)、Object(包括嵌套,键顺序无关)、Array(顺序敏感)、Date(通过 getTime 比较)、RegExp(通过 sourceflags 比较)、Map(深度比较键和值)、Set(顺序无关)。不同类型的值永远不相等,函数仅按引用比较。

Signature:

typescript
function isEqual(a: unknown, b: unknown): boolean;

Example

ts
// 原始值 (NaN 等于 NaN)
isEqual(1, 1); // true
isEqual(NaN, NaN); // true
isEqual("a", "b"); // false

// 完全相等,不同于 isMatch 的部分匹配
isEqual({ a: 1, b: 2 }, { a: 1 }); // false - 键数量不同
isMatch({ a: 1, b: 2 }, { a: 1 }); // true - 子集即可

// 嵌套对象(键顺序无关)
isEqual({ a: 1, b: { c: 2 } }, { b: { c: 2 }, a: 1 }); // true
isEqual({ a: 1 }, { a: 1, b: undefined }); // false - 键数量不同

// 数组(顺序敏感)
isEqual([1, 2, 3], [1, 2, 3]); // true
isEqual([1, 2, 3], [3, 2, 1]); // false

// Date 和 RegExp
isEqual(new Date(1000), new Date(1000)); // true
isEqual(/abc/gi, /abc/gi); // true

// Map(深度比较键和值)
isEqual(new Map([[{ a: 1 }, 1]]), new Map([[{ a: 1 }, 1]])); // true

// Set(顺序无关)
isEqual(new Set([1, 2, 3]), new Set([3, 2, 1])); // true

// 不同类型永远不相等
isEqual(new Date(0), {}); // false
isEqual(null, {}); // false

Open Source Code

Released under the Apache-2.0 License.