Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

muggle-deep-equal

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

muggle-deep-equal

A simple and generic implementation of deep equal

  • 1.0.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
2
Maintainers
1
Weekly downloads
 
Created
Source

muggle-deep-equal

Greenkeeper badge Travis badge standard badge npm

A simple and generic implementation of deep equal using Iterables.

Used in muggle-assert, the assertion library for muggle

Goals

  • Generic and predictable behavior
  • Simple and readable source code
  • Fully tested

Installation

$ npm install muggle-deep-equal

Example

const deepEqual = require('muggle-deep-equal')

// primitives are compared with ===
deepEqual('penguin', 'penguin') // returns true
deepEqual(100, 50) // returns false
deepEqual(1, true) // returns false

deepEqual([1, 2, 3, 4], [1, 2, 3, 4]) // returns true

deepEqual(
  {
    array: [1, 2, 3],
    object: {
      animal: 'penguin'
    }
  },
  {
    array: [1, 2, 3],
    object: {
      animal: 'penguin'
    }
  }
) // returns true

// if either string or array was different, deepEqual would return false

What's deep equal?

If two objects are deeply equal, then their actual data are equal rather than just their reference. It's useful for comparing separate instances of arrays and objects for example.

In muggle-deep-equal, equality is determined by these rules (in order):

  1. If either value is a primitive, then equality is determined using strict equality ===
  • String, Number, Boolean, Function, Symbol, undefined, or null
  • NaN is considered equal to NaN
  1. Both objects must have the same class.
  • object1.constructor.name === object2.constructor.name
  1. If either object is an Iterable, then equality is determined by checking that both contain the same values in the same order.
  • Values are compared by applying these deep equal rules recursively.
  • Every index is compared 1 at a time in order using the iterator protocol
  • Rules #4 and #5 aren't applied to iterables
  1. Both objects must have the same properties and values.
  • Compared by applying these deep equal rules recursively on every value using a for...in loop
  1. Both objects must return the same string representation from object.toString()
  • This allows many other objects to be compared as expected such as Error, Date, and RegExp

Keywords

FAQs

Package last updated on 29 Sep 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc