Skip to main content
Deno 2 is finally here 🎉️
Learn more
Module

x/ayonli_jsext/esm/object/index.js>equals

A JavaScript extension package for building strong and modern applications.
Latest
function equals
import { equals } from "https://deno.land/x/ayonli_jsext@v0.9.72/esm/object/index.js";

Performs a deep comparison between two values to see if they are equivalent or contain the same data.

  • Primitive values, functions and circular references are compared using the === operator or the Object.is function.
  • Object wrappers such as String, Number and Boolean are compared both by their primitive values and their constructors.
  • Objects should have the same constructor in order to be considered potentially equal, unless they implement the Comparable interface.
  • Plain objects are compared by their own enumerable properties, unless they implement the Comparable interface.
  • Arrays are compared one by one by their items.
  • ArrayBuffers and views are compared by their underlying buffers.
  • Map and Set items are compared unordered.
  • RegExp source, flags and lastIndex properties are compared.
  • Error name, message, stack, cause, and errors properties are always compared, if there are other enumerable properties, they are compared as well.
  • URL and URLSearchParams objects are compared by their string representations.
  • Headers and FormData are compared by their entries unordered.
  • Objects that implements the Comparable interface are compared using the compareTo method.
  • Objects whose valueOf method returns primitive values other than NaN are also supported and use their primitive values for comparison.
  • In others cases, values are compared using the === operator.

NOTE: This function returns true if the two values are both NaN.

Examples

Example 1

import { equals } from "@ayonli/jsext/object";

console.log(equals("Hello", "Hello")); // true
console.log(equals(42, 42)); // true
console.log(equals([1, 2, 3], [1, 2, 3])); // true
console.log(equals({ foo: "bar" }, { foo: "bar" })); // true

// deep comparison
console.log(equals(
    { foo: { bar: "baz" } },
    { foo: { bar: "baz" } }
)); // true