Skip to content

isEqual() function

ab の間で深い等価比較(deep equality comparison)を行います。

source がプロパティのサブセットのみ一致すれば十分な部分比較を行う isMatch とは異なり、isEqual は双方向の完全な等価性を要求します。オブジェクトは同じキーの集合を、配列は同じ長さと順序を、Map/Set は同じサイズを持つ必要があります。

対応型: プリミティブ型(NaNNaN と等しいものとして扱われます)、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.