Skip to main content
← ⚑ JavaScript & the browserΒ·Module C8 Β· Lesson 2
TaskDefine deepEqual(a, b) using JSON.stringify. Define assertDeepEqual(actual, expected, msg). Test: assertDeepEqual({a:1,b:2}, {a:1,b:2}, 'objects equal'); assertDeepEqual([1,[2,3]], [1,[2,3]], 'nested arrays'); try assertDeepEqual([1,2], [2,1], 'order') in try/catch and log err.message.

Deep equality for objects and arrays

100 XP8 min
Theory

=== doesn't work on objects

{a:1} === {a:1} is false β€” === compares references, not contents. For tests, you need value equality.

function deepEqual(a, b) {
  return JSON.stringify(a) === JSON.stringify(b);
}

deepEqual({ a: 1 }, { a: 1 });    // true
deepEqual([1, 2], [1, 2]);         // true
deepEqual([1, 2], [2, 1]);         // false β€” order matters

The JSON.stringify trick

  • Fast and short.
  • Handles nested objects/arrays.
  • Two limitations: doesn't handle Map/Set/Date well, and undefined values become absent keys.

For 90% of test cases this is enough. node:test's t.assert.deepStrictEqual is more rigorous (handles Map/Set, distinguishes undefined from missing) but the same idea.

πŸ”’

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β€” card required, cancel anytime.

Sign up β€” free trial β†’

First 10 lessons in each track are free. No card needed for those.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.