Skip to content

isEqual() function

ab 간의 깊은 동등 비교(deep equality comparison)를 수행합니다.

source가 속성의 부분 집합(subset)만 일치하면 되는 부분 비교를 수행하는 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.