isEqual() function
a와 b 간의 깊은 동등 비교(deep equality comparison)를 수행합니다.
source가 속성의 부분 집합(subset)만 일치하면 되는 부분 비교를 수행하는 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