clone:克隆数据,可深度克隆

这里列出了原始类型,时间、正则、错误、数组、对象的克隆规则,其他的可自行补充

function clone(value, deep){    
  if(isPrimitive(value)){

    return value

  }

  if (isArrayLike(value)) { //是类数组

    value = Array.prototype.slice.call(value)

    return value.map(item => deep ? clone(item, deep) : item)

  }else if(isPlainObject(value)){ //是对象

    let target = {}, key;

    for (key in value) {

      value.hasOwnProperty(key) && ( target[key] = deep ? clone(value[key], deep) : value[key] )

    }

  }

  let type = getRawType(value)

    switch(type){

      case 'Date':

      case 'RegExp':

      case 'Error': value = new window[type](value);
    break;

  }

  return value
}
posted @ 2020-01-19 15:01  入坑的H  阅读(305)  评论(0编辑  收藏  举报