@rxap/utilities
Version:
A collection of utility functions, types and interfaces.
41 lines (40 loc) • 1.56 kB
TypeScript
/**
* This function checks if two values are equal. It uses a deep comparison algorithm to determine if two values are equivalent in structure and value.
*
* @export
* @function equals
* @param {any} a - The first value to compare.
* @param {any} b - The second value to compare.
* @param {any[]} [stackA=[]] - An optional array to keep track of traversed values in the first argument. This is used to handle circular references.
* @param {any[]} [stackB=[]] - An optional array to keep track of traversed values in the second argument. This is used to handle circular references.
*
* @returns {boolean} - Returns true if the values are equivalent, false otherwise.
*
* @example
* // returns true
* equals([1, 2, 3], [1, 2, 3]);
*
* @example
* // returns false
* equals({ a: 1 }, { a: 2 });
*
* @example
* // returns true
* equals({ a: { b: 1 } }, { a: { b: 1 } });
*
* @example
* // returns false (different structure)
* equals({ a: { b: 1 } }, { a: 1, b: 1 });
*
* @example
* // returns true (handles circular references)
* var a = {}, b = {};
* a.self = a;
* b.self = b;
* equals(a, b);
*
* Note: This function also checks for the presence of 'fantasy-land/equals' or 'equals' methods on the values and uses them for comparison if they exist.
* It also handles comparison of different types of values like 'Arguments', 'Array', 'Object', 'Boolean', 'Number', 'String', 'Date', 'Error', 'RegExp', 'Map', 'Set', and typed arrays.
*
*/
export declare function equals(a: any, b: any, stackA?: any[], stackB?: any[]): any;