
# object

  Object utils.

## API

### .keys(obj)

  Return the keys for `obj`.

### .values(obj)

  Return the values for `obj`.

### .length(obj)

  Return the number of keys for `obj`.

### .isEmpty(obj)

  Check if `obj` is empty.

### .merge(a, b)

  Merge object `b` into `a`, returns `a`.
  Precedence is given to `b`.

## License

  MIT