I found that often when you want clean deep cloning of objects (e.g. for state data) and when you’re in control of creating the objects it’s better to build them out of Map and Array instances instead of the builtin object type. We use this extensively for config structures and state data, and it makes cloning or merging objects much easier (as you only need to differentiate between a map, array and everything else). This assumes that you will not clone any of the “object” types in your data structure though, so you might want to store immutable data types on there only (which often is possible and advisable for config and state data though). The downside is that the syntax for creating and working with maps is quite ugly (IMHO), I hope they will improve this in a future version of JS.