Fast deep equality checker for modern JavaScript and TypeScript – robust, configurable, and safe for all data types.
- 3-10x faster than popular alternatives (16.7M ops/sec)
- Zero dependencies - completely self-contained
- TypeScript first - comprehensive type definitions
- Highly configurable - customizable comparison options
- Circular reference safe - prevents infinite recursion
- Universal - works in Node.js, browsers, JavaScript & TypeScript projects
- Hybrid optimization - combines fast paths with robust structure
npm install deep-equal-check
import deepEqualCheck from 'deep-equal-check';
// Basic usage
deepEqualCheck({a: 1}, {a: 1}); // true
deepEqualCheck([1, 2, 3], [1, 2, 3]); // true
// Complex objects
const obj1 = {
date: new Date('2023-01-01'),
regex: /test/gi,
set: new Set([1, 2, 3]),
map: new Map([['key', 'value']])
};
const obj2 = {
date: new Date('2023-01-01'),
regex: /test/gi,
set: new Set([1, 2, 3]),
map: new Map([['key', 'value']])
};
deepEqualCheck(obj1, obj2); // true
const deepEqualCheck = require('deep-equal-check');
// Basic usage
deepEqualCheck({a: 1}, {a: 1}); // true
deepEqualCheck([1, 2, 3], [1, 2, 3]); // true
// With options
deepEqualCheck(NaN, NaN, { nanEqual: true }); // true
deepEqualCheck(+0, -0, { strictZero: true }); // false
Run the built-in benchmark:
npm run benchmark
The library uses a hybrid optimization strategy that combines:
- Fast inline paths for primitives, arrays, dates, and regex
- Modular structure for complex cases (sets, maps, objects)
- Order-independent comparisons for collections
- Circular reference detection with proper WeakMap handling
- ✅ Primitives (numbers, strings, booleans, null, undefined)
- ✅ Arrays (including nested and mixed types)
- ✅ Objects (plain objects, custom constructors)
- ✅ ES6+ Types (Set, Map, TypedArray, ArrayBuffer)
- ✅ Built-in Objects (Date, RegExp, Error)
- ✅ Boxed Primitives (String, Number, Boolean)
- ✅ Circular References (with infinite recursion protection)
- 16.7M operations/second - Basic operations (simple cases)
- 9.0M operations/second - Mixed operations (complex cases)
- 6.3x faster than lodash/isEqual
- 5.0x faster than deep-eql
- Competitive with fast-deep-equal (with circular reference support)
- Strong performance on complex data types (Sets, Maps, nested objects)
npx ts-node --project benchmark/tsconfig.json benchmark/compare-libraries.ts
MIT