欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

tools

程序员文章站 2022-06-24 17:06:43
...
// 判断是否空值
export function isDefined(x) { return x !== null && x !== undefined }
// 判断是数字且不为NAN 
export function isNum(x) {
  return typeof x === 'number' && !isNaN(x)
}
/**
 * 深度克隆
 * @param   origin 被拷贝的原对象
 * @param   target 拷贝出来的对象
 * @return         拷贝出来的对象
 */
export function deepClone(origin, target = {}) {
  const toStr = Object.prototype.toString
  for (const prop in origin) {
    // eslint-disable-next-line no-prototype-builtins
    if (origin.hasOwnProperty(prop)) {	// 不能把原型链上的一起拷贝了
    // 判断是元素类型还是引用类型
      if (typeof (origin[prop]) === 'object' && origin[prop]) {
        target[prop] = toStr.call(origin[prop]) === '[object Array]' ? [] : {}
        deepClone(origin[prop], target[prop])	// 递归调用
      } else {
        target[prop] = origin[prop]	// 原始类型直接复制
      }
    }
  }
  return target
}

/**
 * debounce
 * @param {*} fn
 * @param {*} delay
 * @returns
 */
export function debounce(fn, delay = 300) {
  let timer = false
  return function() {
    if (timer) {
      clearTimeout(timer)
      timer = setTimeout(fn, delay)
    } else {
      timer = setTimeout(fn, delay)
    }
  }
}