1. 检测是否是一个函数

const isFunction = (obj) => {
  return typeof obj === 'function' && obj.nodeType !== 'number'
}
// 或者
const isFunction = (fn) => {
  return Object.prototype.toString.call(fn) === '[object Function]'
}

2. 复制文本

const copyText = (text) => {
  // clipboardData 在页面上将需要的东西复制到剪贴板上
  const clipboardData = window.clipboardData
  if (clipboardData) {
    clipboardData.clearData()
    clipboardData.setData('Text', text)
    return true
  } else if (document.execCommand) {
    // 注意 document.execCommand 已弃用 但是有些浏览器依旧支持 用的时候记得看兼容情况
    // 通过创建 dom 元素,去把要复制的内容拿到
    const el = document.createElement('textarea')
    el.value = text
    el.setAttribute('readonly', '')
    el.style.position = 'absolute'
    el.style.left = '-9999px'
    document.body.appendChild(el)
    el.select()
    // 拷贝当前内容到剪贴板
    document.execCommand('copy')
    // 删除 el 节点
    document.body.removeChild(el)
    return true
  }
  return false
}
copyText('hello!') // ctrl + v = copyText  | true

3. 回到顶部

const bindTop = () => {
  // 方法一: 这样可以实现,但是效果不太行
  window.scrollTo(0, 0)
  document.documentElement.scrollTop = 0

  // 方法二: 通过计时器去滚动 视觉上会丝滑一些,没有太大的卡顿效果
  const timeTop = setInterval(() => {
    // 去控制他的滑行距离
    document.documentElement.scrollTop = scrollTopH.value -= 50
    // 当滑到顶部的时候记得清除计时器(*) 重点
    if (scrollTopH.value <= 0) {
      clearInterval(timeTop)
    }
  }, 10)
}

4. 常用的正则判断

// 校验手机号
const validatePhoneNum = (mobile) => {
  const reg = /^1[3, 4, 5, 6, 7, 8, 9]\d{9}$/
  return reg.test(mobile)
}