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工具函数的更多相关文章
- 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 ...
- 常用的js工具函数
JS选取DOM元素的方法注意:原生JS选取DOM元素比使用jQuery类库选取要快很多1.通过ID选取元素document.getElementById('myid');2.通过CLASS选取元素do ...
- JS 工具函数 方法(其中js的crc32和php的crc32区别)
var util = {}; util.indexOf = function (array, item) { for (var i = 0; i < array.length; i++) { i ...
- 更新常用的js工具函数
在手机调试时打印代码<script src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></ ...
- 封装一些常用的js工具函数-不定时更新(希望大家积极留言,反馈bug^_^)
/*华丽------------------------------------------------------------------------------------------------ ...
- JS工具函数汇总
备注:http://phpjs.org/ 这个站点把PHP常用的方法用js实现了,推荐一下 1.从数组中随机获取几个不重复项 //从一个给定的数组arr中,随机返回num个不重复项 function ...
- js正则《转载收藏》
\:转义字符.'\\n'匹配\n ^:开始位置.'^[0-9]'匹配以数字开头的字符,可以匹配'88DC',不可匹配'DC88' $:结束位置.'[0-9]$'匹配以数字结尾的字符,可以匹配'ab12 ...
- JavaScript常用工具函数
检测数据是不是除了symbol外的原始数据 function isStatic(value) { return ( typeof value === 'string' || typeof value ...
- 你要的几个JS实用工具函数(持续更新)
今天,我们来总结下我们平常使用的工具函数,希望对大家有用.1.封装fetch 源码: /** * 封装fetch函数,用Promise做回调 * @type {{get: (function(*=)) ...
- 转载 jQuery和js自定义函数和文件的方法(全网最全)
jQuery和js自定义函数和文件的方法(全网最全) 版权声明:本文为像雾像雨又像风_http://blog.csdn.net/topdandan的原创文章,未经允许不得转载. https:// ...
随机推荐
- 30张图说清楚 TCP 协议
大家好,我是风筝 前两天分享了 20张图说清楚 IP 协议 今天,继续来网管的自我修养之TCP协议,这可是除 IP 协议外另一个核心协议了. TCP 协议是网络传输中至关重要的一个协议,它位于传输层. ...
- 图与网络分析—R实现(一)
图与网络 一个网络G,也可以称为图(graph)或网络图,是一种包含了节点V(即网络参与者,也称顶点)与边E(即节点之间的连接关系)的数学结构,记作G={V,E}.可以使用一个矩阵来存放节点之间的连接 ...
- kubernetes 的TCP 数据包可视化
kubernetes 的TCP 数据包可视化 介绍 k8spacket是用 Golang 编写的工具,它使用gopacket第三方库来嗅探工作负载(传入和传出)上的 TCP 数据包.它在运行的容器网络 ...
- window远程桌面
此文档概述如何开启win8.win8.1系统的远程桌面连接服务,可以让我们从一台电脑远程连接的其他电脑! 同时按"win键+R键",再打开的运行对话框中输入"contro ...
- LLaMA:开放和高效的基础语言模型
LLaMA:开放和高效的基础语言模型 论文:https://arxiv.org/pdf/2302.13971.pdf 代码:https://github.com/facebookresearch/ll ...
- Java设计模式 —— 工厂模式
3 简单工厂模式 3.1 创建型模式 Creational Pattern 关注对象的创建过程,对类的实例化过程进行了抽象,将软件模块中对象的创建和对象的使用分离,对用户隐藏了类的实例的创建细节.创建 ...
- opencv基础
Python 和 OpenCV 的结合是计算机视觉领域中应用最为广泛的一种方式,它们的结合使得开发者可以快速.高效地完成各种视觉任务.本文将介绍 Python 和 OpenCV 的基础使用,包括安装. ...
- [bx] 和 Loop指令
在masm编译器中不同于debug的命令 如:在debug中 mov ax,[0] --> 是说将 偏移地址为 0 中的数据送入ax中 而在汇编语言中 mov ax,[0] --> 是说将 ...
- ping功能实现(ICMP)
简单记录下项目中ping功能实现 笔记:ping功能实现 void Handler::handlePingDepot(const char *ip) { int mSize=50*1024; bzer ...
- 各种远程工具通过ssh连接服务器
开头 最近遇到一个新的连接方式,不能使用日常的本地通过账号连接,要通过私钥和公钥的连接方式,然后连接到服务器之后才能连接到数据库.因为之前没试过这种连接方式,所以很多工具有不同的连接方式.所以现在就记 ...