Deep Value Equality Comparison

1.0.1 · maintenance · verified Sun Apr 19

The `value-equal` package provides a lightweight utility function designed to determine if two JavaScript values are deeply equal based on their content, rather than strict reference equality. It intelligently compares primitive values, arrays, and plain objects by recursively checking their `valueOf` representations. Currently at stable version 1.0.1 (published 7 years ago), the package demonstrates a mature and reliable API. Its release cadence is likely infrequent due to its focused scope and stable implementation, with updates typically limited to critical bug fixes. This package serves as a practical alternative for scenarios where deep value comparison is essential, such as normalizing data for `localStorage` or comparing `window.history.state` values, where objects need to be treated as equal if their contents match. Unlike strict equality (`===`) or more feature-rich libraries, `value-equal` offers a streamlined approach specifically for these use cases without additional overhead.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates basic deep equality comparisons for primitives, strings, plain objects, and arrays.

import valueEqual from 'value-equal';

// Primitive values
console.log('Primitives:');
console.log(valueEqual(1, 1)); // true
console.log(valueEqual('hello', 'hello')); // true
console.log(valueEqual(true, false)); // false
console.log(valueEqual(null, null)); // true
console.log(valueEqual(undefined, undefined)); // true

// String objects vs primitives
console.log('\nStrings:');
console.log(valueEqual('asdf', new String('asdf'))); // true

// Plain objects
console.log('\nObjects:');
console.log(valueEqual({ a: 'a', b: 1 }, { a: 'a', b: 1 })); // true
console.log(valueEqual({ a: 'a' }, { a: 'b' })); // false
console.log(valueEqual({ c: 3, a: 1 }, { a: 1, c: 3 })); // true (order of keys doesn't matter for deep equality)

// Arrays
console.log('\nArrays:');
console.log(valueEqual([1, 2, 3], [1, 2, 3])); // true
console.log(valueEqual([1, 2, { a: 1 }], [1, 2, { a: 1 }])); // true (nested objects)
console.log(valueEqual([1, 2, 3], [2, 3, 4])); // false

// Mixed types
console.log('\nMixed Types:');
console.log(valueEqual({ a: 1 }, [1])); // false

view raw JSON →