object/defaults.jsjavascript
/**
 * 用后续对象中的默认值填充缺失或值为 undefined 的属性。
 * @function defaults
 * @memberof module:object
 * @param {...Object} objects 要合并的对象
 * @returns {Object} 新对象,不修改任何输入对象
 * @throws {TypeError} 参数不是对象时抛出
 */
function defaults(...objects) {
  if (objects.some(object => object === null || typeof object !== 'object' || Array.isArray(object))) throw new TypeError('all arguments must be objects')
  return objects.reduce((result, object) => {
    Object.entries(object).forEach(([key, value]) => {
      if (result[key] === undefined) result[key] = value
    })
    return result
  }, {})
}

export default defaults