JS工具函数
2023/6/10 1:52:11
本文主要是介绍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 }
这篇关于JS工具函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26React入门教程:从零开始搭建你的第一个React应用
- 2024-12-25Vue2入门教程:轻松掌握前端开发基础
- 2024-12-25Vue3入门指南:快速搭建你的第一个Vue3项目
- 2024-12-25JS基础知识入门教程
- 2024-12-25React基础知识详解:从入门到初级应用
- 2024-12-25Vue3基础知识详解与实战指南
- 2024-12-25Vue3学习:从入门到初步掌握
- 2024-12-25Vue3入门:新手必读的简单教程
- 2024-12-23【JS逆向百例】爱疯官网登录逆向分析
- 2024-12-21Vue3教程:新手入门到实践应用