高频使用的JS工具有哪些
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要介绍了高频使用的JS工具有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇高频使用的JS工具有哪些文章都会有所收获,下面我们一起来看看吧。1. 回到顶部较为
千家信息网最后更新 2025年02月23日高频使用的JS工具有哪些
这篇文章主要介绍了高频使用的JS工具有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇高频使用的JS工具有哪些文章都会有所收获,下面我们一起来看看吧。
1. 回到顶部
较为平滑的回到顶部方案
const scrollToTop = () => { const c = document.documentElement.scrollTop || document.body.scrollTop; if (c > 0) { window.requestAnimationFrame(scrollToTop); window.scrollTo(0, c - c / 8); }};scrollToTop();
2. 删除数组指定项
项目中经常会使用的工具方法,传入目标数组和目标元素,返回一个新数组。
const removeArray = (arr, item) => { let result = []; let index = -1; if (!(arr != null && arr.length)) { return result; } result = arr; if (Object.prototype.toString.call(item) == "[object Object]") { index = arr.findIndex((i) => isEqualObject(i, item)); } else { index = arr.findIndex((i) => i === item); } if (index > -1) result.splice(index, 1); return result;};const isEqualObject = (obja, objb) => { const aProps = Object.getOwnPropertyNames(obja); const bProps = Object.getOwnPropertyNames(objb); if (aProps.length != bProps.length) { return false; } for (let i = 0; i < aProps.length; i++) { let propName = aProps[i]; let propA = obja[propName]; let propB = objb[propName]; if (!objb.hasOwnProperty(propName)) return false; if (propA instanceof Object) { if (!this.isEqualObject(propA, propB)) { return false; } } else if (propA !== propB) { return false; } } return true;};removeArray([{ name: 1 }, { name: "1" }, 1, "1"], { name: "1" });
3. 获取 url 某一个参数
用于获取url传参获取参数
const getUrlParam = (key) => { const url = new URL_(window.location.href); const value = url.searchParams.get(key); return value;};getUrlParam("id");
4. 复制文本
复制各种自定义的文本,浏览器兼容性高
const copyText = (text) => { const clipboardData = window.clipboardData; if (clipboardData) { clipboardData.clearData(); clipboardData.setData("Text", text); return true; } else if (document.execCommand) { 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"); document.body.removeChild(el); return true; } return false;};copyText("Test");
5. 禁止复制文本
body { user-select: none; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none;}
// 禁止右键菜单document.body.oncontextmenu = (e) => { return false;};// 禁止选中文字document.body.onselectstart = (e) => { return false;};// 禁止复制document.body.oncopy = (e) => { return false;};// 禁止剪切document.body.oncut = (e) => { return false;};// 禁止粘贴document.body.onpaste = (e) => { return false;};
6. 复制文本带版权信息
document.body.oncopy = (event) => { event.preventDefault(); const clipboardData = event.clipboardData; let text = window.getSelection(0).toString(); text = `${text}\n这是插入的文本\n 作者:于五五\n`; if (clipboardData) { clipboardData.clearData(); clipboardData.setData("Text", text); return true; } else if (document.execCommand) { window.clipboardData.setData("Text", text); } return false;};
7. 判断数据类型和数据值
很常用的工具类,用于校验数据是否合法
// 是否是字符串function isString(obj) { return Object.prototype.toString.call(obj) == "[object String]";}// 是否是数字function isNumber(obj) { return ( Object.prototype.toString.call(obj) == "[object Number]" && /[\d\.]+/.test(String(obj)) );}// 是否是布尔function isBoolean(obj) { return Object.prototype.toString.call(obj) == "[object Boolean]";}// 是否是数组function isArray(obj) { return Object.prototype.toString.call(obj) === "[object Array]";}// 是否是对象function isObject(arg) { if (arg == null) { return false; } else { return Object.prototype.toString.call(arg) == "[object Object]"; }}// 是否是方法function isFunction(arg) { const type = Object.prototype.toString.call(arg); return type == "[object Function]" || type == "[object AsyncFunction]";}// 是否是时间格式function isDate(obj) { return Object.prototype.toString.call(obj) == "[object Date]";}// 是否是时间undefinedfunction isUndefined(arg) { return arg === void 0;}// 是否是空对象function isEmptyObject(arg) { if (isObject(arg)) { for (var key in arg) { if (Object.prototype.hasOwnProperty.call(arg, key)) { return false; } } return true; } return false;}
8. ua 环境判断
用来区分不同平台,常用在ios端做适配
const getUaInfo = () => { const ua = navigator.userAgent.toLowerCase(); const Agents = [ "Android", "android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod", ]; let isPc = true; for (var i = 0; i < Agents.length; i++) { if (userAgentInfo.includes(Agents[i])) { isPc = false; break; } } return { // 是不是ios isIos: !!ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) || ua.includes("mac os x"), // 是不是安卓 isAndroid: ua.includes("android") || ua.includes("Android") || ua.includes("Adr"), // 是不是微信环境 isWeixin: ua.match(/MicroMessenger/i) == "micromessenger", // 是不是电脑端 isPc: isPc, };};
9. 时间格式转换
// Date转yyyy-MM-dd HH:mm:ssconst filterTimeByDate = (date, pattern = "yyyy-MM-dd HH:mm:ss") => { const o = { "M+": date.getMonth() + 1, "d+": date.getDate(), "H+": date.getHours(), "m+": date.getMinutes(), "s+": date.getSeconds(), "q+": Math.floor((date.getMonth() + 3) / 3), S: date.getMilliseconds(), }; if (/(y+)/.test(pattern)) { pattern = pattern.replace( RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length) ); } for (var k in o) { if (new RegExp("(" + k + ")").test(pattern)) { pattern = pattern.replace( RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length) ); } } return pattern;};filterTimeByDate(new Date());// 时间戳转yyyy-MM-dd HH:mm:ssconst timestampToTime = (timestamp) => { const date = new Date( String(timestamp).length > 10 ? timestamp : timestamp * 1000 ); //时间戳为10位需*1000,时间戳为13位的话不需乘1000 const Y = date.getFullYear() + "-"; const M = (date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1) + "-"; const D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " "; const h = (date.getHours() < 10 ? "0" + date.getHours() : date.getHours()) + ":"; const m = (date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()) + ":"; const s = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds(); return Y + M + D + h + m + s;};timestampToTime(new Date().getTime());// yyyy-MM-dd HH:mm:ss转时间戳const timeToTimestamp = (time, isMilli = true) => { const timestamp = new Date(time).getTime(); //时间戳为10位需*1000,时间戳为13位的话不需乘1000 return isMilli ? timestamp : timestamp / 1000;};timeToTimestamp("2022-04-26 10:11:11");
10. 函数防抖
const debounce = (fn, delay) => { let timer = null; return function (e) { clearTimeout(timer); timer = setTimeout(() => { fn.apply(this, arguments); }, delay); };};document.addEventListener( "scroll", debounce(function () { console.log("执行"); }, 2000));
11. 全屏/退出全屏
function toFullScreen() { let = document.documentElement; el.webkitRequestFullScreen ? el.webkitRequestFullScreen() : el.mozRequestFullScreen ? el.mozRequestFullScreen() : el.msRequestFullscreen ? el.msRequestFullscreen() : el.requestFullScreen ? el.requestFullScreen() : alert("当前浏览器不支持该功能");}function exitFullscreen() { let el = document; el.webkitCancelFullScreen ? el.webkitCancelFullScreen() : el.mozCancelFullScreen ? el.mozCancelFullScreen() : el.cancelFullScreen ? el.cancelFullScreen() : el.msExitFullscreen ? el.msExitFullscreen() : el.exitFullscreen ? el.exitFullscreen() : alert("当前浏览器不支持该功能");}
12. 禁止打开控制台调试
用来防止部分用户通过源码攻击服务器,增加破解难度
setInterval(function () { check();}, 4000);const check = () => { function doCheck(a) { if (("" + a / a)["length"] !== 1 || a % 20 === 0) { (function () {}["constructor"]("debugger")()); } else { (function () {}["constructor"]("debugger")()); } doCheck(++a); } try { doCheck(0); } catch (err) {}};check();
13. 密码强度展示
const checkPwd = (str) => { let Lv = 0; if (str.length < 6) { return Lv; } if (/[0-9]/.test(str)) { Lv++; } if (/[a-z]/.test(str)) { Lv++; } if (/[A-Z]/.test(str)) { Lv++; } if (/[\.|-|_]/.test(str)) { Lv++; } return Lv;};
14. 五星好评
const getRate = (rate = 0) => { return "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate);};getRate(3);
15. 保留 n 位小数
const filterToFixed => (num, n = 2) { return parseFloat(num.toFixed(n), 10);}
16. 金额转大写
商城项目里订单模块很常用的工具方法
const convertCurrency = (money) => { //汉字的数字 const cnNums = new Array( "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" ); //基本单位 const cnIntRadice = new Array("", "拾", "佰", "仟"); //对应整数部分扩展单位 const cnIntUnits = new Array("", "万", "亿", "兆"); //对应小数部分单位 const cnDecUnits = new Array("角", "分", "毫", "厘"); //整数金额时后面跟的字符 const cnInteger = "整"; //整型完以后的单位 const cnIntLast = "元"; //最大处理的数字 const maxNum = 999999999999999.9999; //金额整数部分 let integerNum; //金额小数部分 let decimalNum; //输出的中文金额字符串 let chineseStr = ""; //分离金额后用的数组,预定义 let parts; // 传入的参数为空情况 if (money == "") { return ""; } money = parseFloat(money); if (money >= maxNum) { return ""; } // 传入的参数为0情况 if (money == 0) { chineseStr = cnNums[0] + cnIntLast + cnInteger; return chineseStr; } // 转为字符串 money = money.toString(); // indexOf 检测某字符在字符串中首次出现的位置 返回索引值(从0 开始) -1 代表无 if (money.indexOf(".") == -1) { integerNum = money; decimalNum = ""; } else { parts = money.split("."); integerNum = parts[0]; decimalNum = parts[1].substr(0, 4); } //转换整数部分 if (parseInt(integerNum, 10) > 0) { let zeroCount = 0; let IntLen = integerNum.length; for (let i = 0; i < IntLen; i++) { let n = integerNum.substr(i, 1); let p = IntLen - i - 1; let q = p / 4; let m = p % 4; if (n == "0") { zeroCount++; } else { if (zeroCount > 0) { chineseStr += cnNums[0]; } zeroCount = 0; chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; } if (m == 0 && zeroCount < 4) { chineseStr += cnIntUnits[q]; } } // 最后+ 元 chineseStr += cnIntLast; } // 转换小数部分 if (decimalNum != "") { let decLen = decimalNum.length; for (let i = 0; i < decLen; i++) { let n = decimalNum.substr(i, 1); if (n != "0") { chineseStr += cnNums[Number(n)] + cnDecUnits[i]; } } } if (chineseStr == "") { chineseStr += cnNums[0] + cnIntLast + cnInteger; } else if (decimalNum == "") { chineseStr += cnInteger; } return chineseStr;};
17. 常用正则判断
// 校验昵称为2-9位中文const validateName = (name) => { const reg = /^[\u4e00-\u9fa5]{2,9}$/; return reg.test(name);};// 校验手机号const validateMobile = (mobile) => { const reg = /^1[3,4,5,6,7,8,9]\d{9}$/; return reg.test(mobile);};// 校验6到18位大小写字母数字下划线组成的密码const validatePassword = (password) => { const reg = /^[a-zA-Z0-9_]{6,18}$/; return reg.test(password);};// 校验身份证号const validateCardId = (cardId) => { const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; return reg.test(cardId);};
18. 解决运算精度丢失的问题
用来解决前端计算金额时精度丢失的问题
const calculation = { // 加法 plus(arg1, arg2) { var r1, r2, m; try { r1 = arg1.toString().split(".")[1].length; } catch (e) { r1 = 0; } try { r2 = arg2.toString().split(".")[1].length; } catch (e) { r2 = 0; } m = Math.pow(10, Math.max(r1, r2)); return (arg1 * m + arg2 * m) / m; }, //减法 subtract(arg1, arg2) { var r1, r2, m, n; try { r1 = arg1.toString().split(".")[1].length; } catch (e) { r1 = 0; } try { r2 = arg2.toString().split(".")[1].length; } catch (e) { r2 = 0; } m = Math.pow(10, Math.max(r1, r2)); n = r1 >= r2 ? r1 : r2; return ((arg1 * m - arg2 * m) / m).toFixed(n); }, // 乘法 multiply(arg1, arg2) { var m = 0, s1 = arg1.toString(), s2 = arg2.toString(); try { m += s1.split(".")[1].length; } catch (e) {} try { m += s2.split(".")[1].length; } catch (e) {} return ( (Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) / Math.pow(10, m) ); }, // 除法 divide(arg1, arg2) { var t1 = 0, t2 = 0, r1, r2; try { t1 = arg1.toString().split(".")[1].length; } catch (e) {} try { t2 = arg2.toString().split(".")[1].length; } catch (e) {} r1 = Number(arg1.toString().replace(".", "")); r2 = Number(arg2.toString().replace(".", "")); return (r1 / r2) * Math.pow(10, t2 - t1); },};
关于"高频使用的JS工具有哪些"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"高频使用的JS工具有哪些"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
时间
部分
金额
字符
数组
文本
单位
参数
字符串
小数
常用
数字
整数
工具
数据
方法
浏览器
知识
浏览
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
店铺挂服务器里面安全吗
岳阳快速软件开发哪家好
华灏服务器部门怎么样
软件开发公司如何线上拓展业务
扬州公司网络安全准入控制
软件开发中的算法是什么意思
大同网络技术调试
软件开发感觉好累
王春龙 软件开发
tiktok安卓怎么连接服务器
django服务器管理系统
软件开发出来之后要注册商标
虚拟化服务器ip打不开
渤海银行软件开发咋样
软件开发 监理费怎么算
软件开发文档通用要求
监控系统服务器是什么
校园网络安全小故事
计算机审计数据库在哪里
黄河服务器芯片
查看服务器显卡是否已经插入
网络安全高级工程师咋样
常见软件开发系统
内网网络安全问题
关于扩容服务器费用的申请
云浮市网络安全周活动
网络技术哪个专业好学
网络安全法实施周年
电力负荷数据库
多少岁可以做软件开发