JS工具函数

工具函数

用于工程化开发,记录,备用

返回 [min, max) 间的随机整数

/** 返回 [min, max) 间的随机整数 */export function getRandom(min, max) {  return Math.floor(Math.random() * (max - min) + min)}

返回随机id

/** * 返回随机id * @returns {String} */export function randomId() {  const char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'  let result = ''  for (let i = 0; i < 16; i++) {    result += char[getRandom(0, char.length)]  }  return result}

判断一个值是否是Object

/** * 判断一个值是否是Object * @param {*} value * @returns {Boolean} */export function isObject(value) {  return Object.prototype.toString.call(value) === '[object Object]'}

判断value是否为空

/** * 判断value是否为空 * @param {*} value * @returns {Boolean} */export function isEmpty(value) {  if (value === null || typeof value === 'undefined') {    return true  }  if (typeof value === 'number' && isNaN(value)) {    return true  }  if (typeof value === 'string' && value === '') {    return true  }  if (Array.isArray(value) && value.length <= 0) {    return true  }  if (isObject(value) && Object.keys(value).length <= 0) {    return true  }  return false}

判断value是否不为空

/** * 判断value是否不为空 * @param {*} value * @returns {Boolean} */export function isNotEmpty(value) {  return !isEmpty(value)}

复制对象属性

/** * 将origin中的属性复制到target中 * @param {Object} target 目标对象 * @param {Object} origin 源对象 * @returns {Object} */export function copyProp(target, origin) {  if (!isObject(target) || !isObject(origin)) {    throw new Error('Argument must be of object type!')  }  if (isEmpty(origin)) {    return target  }  for (const key in origin) {    target[key] = origin[key]  }  return target}

深拷贝

仅支持对象和数组

/** 深拷贝 */export function deepClone(value) {  if (typeof value !== 'object' || isEmpty(value)) {    return value  }  let result = Array.isArray(value) ? [] : {}  for (const key in value) {    result[key] = deepClone(value[key])  }  return result}

模拟异步延时

/** * 模拟异步延时 * @param {Number} [duration=500] 延迟的时间(ms) * @returns {Promise} */export function delay(duration = 500) {  return new Promise((resolve) => setTimeout(resolve, duration))}

函数只调用一次函数

/** * 函数只调用一次函数 * @param {Function} fn * @returns {Function} */export function once(fn) {  let executed = false  return () => {    if (!executed) {      executed = true      fn.apply(this, ...arguments)    }  }}

防抖

/** * 防抖 * @param {Function} fn 要进行防抖的函数 * @param {Number} [duration=100] 延迟时间 * @returns {Function} */export function debounce(fn, duration = 100) {  let timer = null  return (...args) => {    clearTimeout(timer)    timer = setTimeout(() => {      fn(...args)    }, duration)  }}

节流

/** * 节流 * @param {Function} fn 要节流的函数 * @param {Number} [duration=50] 延迟时间 * @returns */export function throttle(fn, duration = 50) {  let mark = 0  return () => {    if (Date.now() - mark >= duration) {      fn.apply(this, arguments)      mark = Date.now()    }  }}

返回顶部

/** 返回顶部 */export function goTop() {  window.scroll({    top: 0,    left: 0,    behavior: 'smooth',  })}

获取url参数

/** * 获取url参数 * @param {String} [url=location.href] url地址,不传使用当前网站url * @returns {Object} */export function getUrlParams(url = location.href) {  const index = url.indexOf('?')  const result = {}  if (index === -1) {    return result  }  const arr = url.substring(index + 1).split('&')  for (let i = 0; i < arr.length; i++) {    const param = arr[i].split('=')    result[param[0]] = param[1]  }  return result}

完整文件

/** 返回 [min, max) 间的随机整数 */export function getRandom(min, max) {  return Math.floor(Math.random() * (max - min) + min)} /** * 返回随机id * @returns {String} */export function randomId() {  const char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'  let result = ''  for (let i = 0; i < 16; i++) {    result += char[getRandom(0, char.length)]  }  return result} /** * 判断一个值是否是Object * @param {*} value * @returns {Boolean} */export function isObject(value) {  return Object.prototype.toString.call(value) === '[object Object]'} /** * 判断value是否为空 * @param {*} value * @returns {Boolean} */export function isEmpty(value) {  if (value === null || typeof value === 'undefined') {    return true  }  if (typeof value === 'number' && isNaN(value)) {    return true  }  if (typeof value === 'string' && value === '') {    return true  }  if (Array.isArray(value) && value.length <= 0) {    return true  }  if (isObject(value) && Object.keys(value).length <= 0) {    return true  }  return false} /** * 判断value是否不为空 * @param {*} value * @returns {Boolean} */export function isNotEmpty(value) {  return !isEmpty(value)} /** * 将origin中的属性赋值到target中 * @param {Object} target 目标对象 * @param {Object} origin 源对象 * @returns {Object} */export function copyProp(target, origin) {  if (!isObject(target) || !isObject(origin)) {    throw new Error('Argument must be of object type!')  }  if (isEmpty(origin)) {    return target  }  for (const key in origin) {    target[key] = origin[key]  }  return target} /** 深拷贝 */export function deepClone(value) {  if (typeof value !== 'object' || isEmpty(value)) {    return value  }  let result = Array.isArray(value) ? [] : {}  for (const key in value) {    result[key] = deepClone(value[key])  }  return result} /** * 模拟异步延时 * @param {Number} [duration=500] 延迟的时间(ms) * @returns {Promise} */export function delay(duration = 500) {  return new Promise((resolve) => setTimeout(resolve, duration))} /** * 函数只调用一次函数 * @param {Function} fn * @returns {Function} */export function once(fn) {  let executed = false  return () => {    if (!executed) {      executed = true      fn.apply(this, ...arguments)    }  }} /** * 防抖 * @param {Function} fn 要进行防抖的函数 * @param {Number} [duration=100] 延迟时间 * @returns {Function} */export function debounce(fn, duration = 100) {  let timer = null  return (...args) => {    clearTimeout(timer)    timer = setTimeout(() => {      fn(...args)    }, duration)  }} /** * 节流 * @param {Function} fn 要节流的函数 * @param {Number} [duration=50] 延迟时间 * @returns */export function throttle(fn, duration = 50) {  let mark = 0  return () => {    if (Date.now() - mark >= duration) {      fn.apply(this, arguments)      mark = Date.now()    }  }} /** 返回顶部 */export function goTop() {  window.scroll({    top: 0,    left: 0,    behavior: 'smooth',  })} /** * 获取url参数 * @param {String} [url=location.href] url地址,不传使用当前网站url * @returns {Object} */export function getUrlParams(url = location.href) {  const index = url.indexOf('?')  const result = {}  if (index === -1) {    return result  }  const arr = url.substring(index + 1).split('&')  for (let i = 0; i < arr.length; i++) {    const param = arr[i].split('=')    result[param[0]] = param[1]  }  return result} 

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYMh4Xdd' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片