isEqual() function
a と b の間で深い等価比較(deep equality comparison)を行います。
source がプロパティのサブセットのみ一致すれば十分な部分比較を行う isMatch とは異なり、isEqual は双方向の完全な等価性を要求します。オブジェクトは同じキーの集合を、配列は同じ長さと順序を、Map/Set は同じサイズを持つ必要があります。
対応型: プリミティブ型(NaN は NaN と等しいものとして扱われます)、Object(ネストを含む、キーの順序は無関係)、Array(順序が重要)、Date(getTime で比較)、RegExp(source と flags で比較)、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