assert.deepEqual()'s strict East Coast siblings with engineering backgrounds,
only-shallow is their laid-back California cousin.
only-shallow is a
cyclical data structures, is written to avoid try / catch / throw (for speed),
and has no dependencies. It's not particularly strict about matching types.
It's more of a duck squeezer.
It has some optimizations but stresses correctness over raw speed. Unlike
deepest, it has no native dependencies, so you can use it, like, wherever.
I like to think the documentation is pretty OK.
only-shallow has this name because I'm
npm install only-shallow
var deepEqual =if ! console;
Copied from the source, here are the details of
- Use loose equality (
==) only for value types (non-objects). This is the biggest difference between
only-shallowcares more about shape and contents than type. This step will also catch functions, with the useful (default) property that only references to the same function are considered equal. 'Ware the halting problem!
nullis an object – a singleton value object, in fact – so if either is
null, return a == b. For the purposes of
only-shallow, loose testing of emptiness makes sense.
- Since the only way to make it this far is for
bto be an object, if
bis not an object, they're clearly not the same.
- It's much faster to compare dates by numeric value (
.getTime()) than by lexical value.
- Compare RegExps by their components, not the objects themselves.
- The parts of an arguments list most people care about are the arguments themselves, not the callee, which you shouldn't be looking at anyway.
- Objects are more complex:
bboth have no properties.
- Ensure that
bhave the same number of own properties (which is what
- Ensure that cyclical references don't blow up the stack.
- Ensure that all the key names match (faster).
- Ensure that all of the associated values match, recursively (slower).
ISC. Go nuts.