A (deep) cloning method for ES-Objects
I spent a ton of time on this;

The choice to replicate Date but not the other 50+ built-ins is interesting
I would write isObject as const isObject = x =&gt; (typeof x === 'object' &amp;&amp; x !== null)
A question to ask yourself, what about functions, do you want to clone those as well?
 if (Object.keys(obj).length &lt; 1) { return obj; } is interesting, this means you will allow for modifications in the original object to impact the new object
The poor man's deep clone for non-cyclic structures is JSON.parse(JSON.stringify(o))
After the construction here: newObj[key] = new value.constructor(value); I would still copy over the properties as well
Still mulling over a counter example..