canBeObject = function canBeObject(obj) {
                return typeof obj !== 'undefined' && obj !== null;
              }
this is implementation of Object.assign() which is unavailable in
IE11 and (non-Chrome) Android browsers.
The assign() method is used to copy the values of all enumerable
own properties from one or more source objects to a target object.
It will return the target object.
Modified from https://github.com/ljharb/object.assign