---
name: "up.util.isEqual.key"
area: "API"
kind: "JavaScript property"
parent: "up.util module"
url: "https://unpoly.com/api/up.util.isEqual.key"
---
<nav aria-label="Unpoly docs">[All docs](https://unpoly.com/index.md) · [up.util module](https://unpoly.com/api/up.util.md)</nav>

# up.util.isEqual.key

This property contains the name of a method that user-defined classes may implement to hook into the [`up.util.isEqual()`](https://unpoly.com/api/up.util.isEqual.md) protocol.

## Example {#example}

We have a user-defined `Account` class that we want to use with [`up.util.isEqual()`](https://unpoly.com/api/up.util.isEqual.md):

```js
class Account {
  constructor(email) {
    this.email = email
  }

  [up.util.isEqual.key](other) {
    return this.email === other.email
  }
}
```

Note that the protocol method is not actually named `'up.util.isEqual.key'`. Instead it is named after the _value_ of the `up.util.isEqual.key` property. To do so, the code sample above is using a [computed property name](https://medium.com/front-end-weekly/javascript-object-creation-356e504173a8) in square brackets.

We may now use `Account` instances with [`up.util.isEqual()`](https://unpoly.com/api/up.util.isEqual.md):

```js
let one = new Account('foo@foo.com')
let two = new Account('foo@foo.com')
let three = new Account('bar@bar.com')

up.util.isEqual(one, two)   // returns true
up.util.isEqual(one, three) // returns false
```

---

## Value {#value}

### key {#key}

Type: string

