工具函数

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

返回 [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工具函数的更多相关文章

  1. js工具函数《转载收藏》

    1.等待所有图片加载 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 var imgObjs = [], count = 0; rotate.prize ...

  2. 常用的js工具函数

    JS选取DOM元素的方法注意:原生JS选取DOM元素比使用jQuery类库选取要快很多1.通过ID选取元素document.getElementById('myid');2.通过CLASS选取元素do ...

  3. JS 工具函数 方法(其中js的crc32和php的crc32区别)

    var util = {}; util.indexOf = function (array, item) { for (var i = 0; i < array.length; i++) { i ...

  4. 更新常用的js工具函数

    在手机调试时打印代码<script src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></ ...

  5. 封装一些常用的js工具函数-不定时更新(希望大家积极留言,反馈bug^_^)

    /*华丽------------------------------------------------------------------------------------------------ ...

  6. JS工具函数汇总

    备注:http://phpjs.org/  这个站点把PHP常用的方法用js实现了,推荐一下 1.从数组中随机获取几个不重复项 //从一个给定的数组arr中,随机返回num个不重复项 function ...

  7. js正则《转载收藏》

    \:转义字符.'\\n'匹配\n ^:开始位置.'^[0-9]'匹配以数字开头的字符,可以匹配'88DC',不可匹配'DC88' $:结束位置.'[0-9]$'匹配以数字结尾的字符,可以匹配'ab12 ...

  8. JavaScript常用工具函数

    检测数据是不是除了symbol外的原始数据 function isStatic(value) { return ( typeof value === 'string' || typeof value ...

  9. 你要的几个JS实用工具函数(持续更新)

    今天,我们来总结下我们平常使用的工具函数,希望对大家有用.1.封装fetch 源码: /** * 封装fetch函数,用Promise做回调 * @type {{get: (function(*=)) ...

  10. 转载 jQuery和js自定义函数和文件的方法(全网最全)

    jQuery和js自定义函数和文件的方法(全网最全)    版权声明:本文为像雾像雨又像风_http://blog.csdn.net/topdandan的原创文章,未经允许不得转载. https:// ...

随机推荐

  1. jQ-DOM属性的操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. PyQt5学习 (2)--QWidget(上)

    描述:   1.所有可视控件的基类   2.是一个最简单的空白控件   3.控件时用户界面的最小元素:接收各种事件.绘制在桌面上,展示给用户看   4.每个控件都是矩形的,它们按Z轴顺序排序   5. ...

  3. PyQt5学习 (1)--对象的基本操作、QObject

    参考视频:[Python-GUI编程-PyQt5 (少)] https://www.bilibili.com/video/BV17J41177ro/?share_source=copy_web& ...

  4. 这年头,谁的好友列表还没有躺一个ChatGPT啊?

    你要是说这个,我可不困了 大家好,我最近开始使用一款非常有趣的AI机器人,它叫做ChatGPT.ChatGPT是一款独特的聊天机器人,它可以进行智能对话,回答你的问题,还可以学习你的语言习惯,使得对话 ...

  5. w11修改ie保护模式方法

    IE安全设置下有4个区域 对应的设置在不同的注册表中.[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Set ...

  6. DG:windows密码文件

    问题描述:搭建DG,找不到密码文件的位置,就给备库重新生成了一个密码文件,传到了备库,但是拉到了备库以后,恢复过程中,trace日志在报错,后来才知道windows下的密码文件跟linux平台下的面文 ...

  7. Go语言实战: 即时通信系统(未完)

    使用Go语言构建一个即时通信系统,旨在锻炼Go语言编程能力 该通信系统至少能够允许用户能够在客户端进行公聊,即所发消息能被所有用户看到,也可发起私聊(即两个用户之间私密通信).同时,用户能够看到当前有 ...

  8. 从 1 秒到 10 毫秒!在 APISIX 中减少 Prometheus 请求阻塞

    本文介绍了 Prometheus 插件造成长尾请求现象的原因,以及如何解决这个问题. 作者屠正松,Apache APISIX PMC Member. 原文链接 现象 在 APISIX 社区中,曾有部分 ...

  9. 2.JAVA入门基础知识

    数据类型: java的数据类型分为两大类:基本类型和引用类型 基本类型: 整数类型: byte 一个字节 -128-127 short 2个字节 32768-32767 int 4个字节 很大 lon ...

  10. ARL:资产侦察灯塔系统

    资产灯塔,不仅仅是域名收集 功能简介 "挖洞神器"资产安全灯塔(ARL),旨在快速侦察与目标关联的互联网资产,构建基础资产信息库. 协助甲方安全团队或者渗透测试人员有效侦察和检索资 ...