# @segment/equals

> Check if two values are deeply equivalent

Latest version **1.1.1** (published 2016-06-02) · MIT license · 0 weekly downloads

## Install

```sh
npm install @segment/equals
pnpm add @segment/equals
yarn add @segment/equals
bun add @segment/equals
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.1 |
| Published | 2016-06-02 |
| First published | 2016-06-02 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 12 |
| Author | Jake Rosoman |
| Maintainers | segment |
| Keywords | equality, equal, equivalent, equivalence, = |

## Links

- npm: https://www.npmjs.com/package/@segment/equals
- Repository: https://github.com/jkroso/equals
- Homepage: https://github.com/jkroso/equals#readme
- Issues: https://github.com/jkroso/equals/issues
- npm.io page: https://npm.io/package/@segment/equals

## Dependencies (1)

- [jkroso-type](https://npm.io/package/jkroso-type.md) 1.1.0

## Recent versions

- 1.1.1 (latest) — 2016-06-02

## README

# equals

  compare values of any type for equility

## Installation

With your favorite package manager:

- [packin](//github.com/jkroso/packin): `packin add equals`
- [component](//github.com/component/component#installing-packages): `component install jkroso/equals`
- [npm](//npmjs.org/doc/cli/npm-install.html): `npm install equals`

then in your app:

```js
var equal = require('equals')
```

## API

### equal(a, b, [memos])

`equal` takes as many arguments as you like of any type you like and returns a boolean result. Primitive types are equal if they are `===`. While composite types, i.e. Objects and Arrays, are considered equal if they have both the same structure and each sub-value is also `equal`. Circular references in composite structures are supported.

Same structure:
```js
equal(
  { a : [ 2, 3 ], b : [ 4 ] },
  { a : [ 2, 3 ], b : [ 4 ] }
) // => true
```

Different Structure:
```js
equal(
  { x : 5, y : [6] },
  { x : 5}
) // => false
```

Same structure, different values:

```js
equal(
  { a: [ 1, 2 ], b : [ 4 ]},
  { a: [ 2, 3 ], b : [ 4 ]}
) // => false
```

Primitives:

```js
equal(new Date(0), new Date(1)) // => false
```

Some possible gotchas:
- `null` __is not__ equal to `undefined`.
- `NaN` __is__ equal to `NaN` (normally not the case).
- `-0` __is__ equal to `+0`.
- Strings will __not__ coerce to numbers.
- Non enumerable properties will not be checked. They can't be.
- `arguments.callee` is not considered when comparing arguments

---
_Source: https://npm.io/package/@segment/equals · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
