Source: object.js

/**
 * 根据path安全获取值
 * @param {object} object 取值的对象
 * @param {string} path 属性path
 * @param {*} defaultValue 默认值
 * @returns {*} 获取的值
 */
function getValueByPath (object, path, defaultValue) {
  // 对像为null
  if (object === null) {
    if (defaultValue !== undefined) {
      return defaultValue;
    }
    return;
  }

  const paths = path.split('.');

  // 遍历路径
  const val = paths.reduce((prev, item) => {
    if (prev == null) {
      return prev;
    }
    return prev[item];
  }, object);

  // 如拿到的值为undefined,返回默认值
  if (val === undefined) {
    return defaultValue;
  }
  return val;
}

/**
 * 深复制对象
 * @param {object|array} object 被复制的对象
 * @returns {*} 复制的对象
 */
function deepCopy (object) {
  try {
    return JSON.parse(JSON.stringify(object));
  }
  catch (e) {
    return object;
  }
}

/**
 * 判断类型
 * @param {*} value 要判断的对象
 * @param {string} type 类型
 * @returns {boolean}
 */
function isType (value, type) {
  return {}.toString.call(value) === `[object ${type}]`;
}

export {
  getValueByPath,
  deepCopy,
  isType,
};