文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

让你瞬间提高工作效率的常用JS函数汇总

2024-12-03 15:10

关注

前言

本文总结了项目开发过程中常用的js函数和正则,意在提高大家平时的开发效率,具体内容如下:

  1. 常用的正则校验
  2. 常用的设备检测方式
  3. 常用的日期时间函数
  4. 跨端事件处理
  5. js移动端适配方案
  6. xss预防方式
  7. 常用的js算法(防抖,截流,去重,排序,模板渲染,观察者...)

代码

1.正则

  1. // 匹配邮箱 
  2. let reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$ 
  3.  
  4. // (新)匹配手机号 
  5. let reg = /^1[0-9]{10}$/; 
  6.  
  7. // (旧)匹配手机号 
  8. let reg = /^1(3|4|5|7|8)[0-9]{9}$/; 
  9.  
  10. // 匹配8-16位数字和字母密码的正则表达式 
  11. let reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/; 
  12.  
  13. // 匹配国内电话号码 0510-4305211 
  14. let reg = /\d{3}-\d{8}|\d{4}-\d{7}/; 
  15.  
  16. // 匹配身份证号码 
  17. let reg=/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; 
  18.  
  19. // 匹配腾讯QQ号 
  20. let reg = /[1-9][0-9]{4,}/; 
  21.  
  22. // 匹配ip地址 
  23. let reg = /\d+\.\d+\.\d+\.\d+/; 
  24.  
  25. // 匹配中文 
  26. let reg = /^[\u4e00-\u9fa5]*$/; 

检测平台(设备)类型

  1. let isWechat = /micromessenger/i.test(navigator.userAgent), 
  2.     isWeibo = /weibo/i.test(navigator.userAgent), 
  3.     isQQ = /qq\//i.test(navigator.userAgent), 
  4.     isIOS = /(iphone|ipod|ipad|ios)/i.test(navigator.userAgent), 
  5.     isAndroid = /android/i.test(navigator.userAgent); 

常用的日期时间函数

  1. // 时间格式化 
  2. function format_date(timeStamp) { 
  3.     let date = new Date(timeStamp); 
  4.     return date.getFullYear() + "年" 
  5.         + prefix_zero(date.getMonth() + 1) + "月" 
  6.         + prefix_zero(date.getDate()) + "日 " 
  7.         + prefix_zero(date.getHours()) + ":" 
  8.         + prefix_zero(date.getMinutes()); 
  9.  
  10. // 数字格式化 
  11. function prefix_zero(num) { 
  12.     return num >= 10 ? num : "0" + num; 
  13.  
  14. // 倒计时时间格式化 
  15. function format_time(timeStamp) { 
  16.     let day = Math.floor(timeStamp / (24 * 3600 * 1000)); 
  17.     let leave1 = timeStamp % (24 * 3600 * 1000); 
  18.     let hours = Math.floor(leave1 / (3600 * 1000)); 
  19.     let leave2 = leave1 % (3600 * 1000); 
  20.     let minutes = Math.floor(leave2 / (60 * 1000)); 
  21.     let leave3 = leave2 % (60 * 1000); 
  22.     let seconds = Math.floor(leave3 / 1000); 
  23.     if (dayreturn day + "天" + hours + "小时" + minutes + "分"
  24.     if (hours) return hours + "小时" + minutes + "分" + seconds + "秒"
  25.     if (minutes) return minutes + "分" + seconds + "秒"
  26.     if (seconds) return seconds + "秒"
  27.     return "时间到!"

跨端事件处理

  1. (function (doc, win) { 
  2.     var docEl = doc.documentElement, 
  3.         resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'
  4.         recalc = function () { 
  5.             var clientWidth = docEl.clientWidth; 
  6.             var fontSize = 20; 
  7.             docEl.style.fontSize = fontSize + 'px'
  8.             var docStyles = getComputedStyle(docEl); 
  9.             var realFontSize = parseFloat(docStyles.fontSize); 
  10.             var scale = realFontSize / fontSize; 
  11.             console.log("realFontSize: " + realFontSize + ", scale: " + scale); 
  12.             fontSize = clientWidth / 667 * 20; 
  13.             if(isIphoneX()) fontSize = 19; 
  14.             fontSize = fontSize / scale; 
  15.             docEl.style.fontSize = fontSize + 'px'
  16.         }; 
  17.     // Abort if browser does not support addEventListener 
  18.     if (!doc.addEventListener) return
  19.     win.addEventListener(resizeEvt, recalc, false); 
  20.     doc.addEventListener('DOMContentLoaded', recalc, false); 
  21.  
  22.     // iphoneX判断 
  23.     function isIphoneX(){ 
  24.         return /iphone/gi.test(navigator.userAgent) && (screen.height == 812 && screen.width == 375) 
  25.     } 
  26.  
  27. })(document, window); 

xss预防方式

  1. // 敏感符号转义 
  2. function entities(s) { 
  3.     let e = { 
  4.         '"''"'
  5.         '&''&'
  6.         '<''<'
  7.         '>''>' 
  8.     } 
  9.     return s.replace(/["<>&]/g, m => { 
  10.         return e[m] 
  11.     }) 

7.常用的js算法

  1.  
  2. function throttle(fun, delay) { 
  3.     let last, deferTimer 
  4.     return function (args) { 
  5.         let that = this 
  6.         let _args = arguments 
  7.         let now = +new Date() 
  8.         if (last && now < last + delay) { 
  9.             clearTimeout(deferTimer) 
  10.             deferTimer = setTimeout(function () { 
  11.                 last = now 
  12.                 fun.apply(that, _args) 
  13.             }, delay) 
  14.         }else { 
  15.             last = now 
  16.             fun.apply(that,_args) 
  17.         } 
  18.     } 
  19.  
  20.  
  21.  function debounce(fun, delay) { 
  22.     return function (args) { 
  23.         let that = this 
  24.         clearTimeout(fun.id) 
  25.         fun.id = setTimeout(function () { 
  26.             fun.call(that, args) 
  27.         }, delay) 
  28.     } 
  29.  
  30. // 观察者模式 
  31. let Observer = (function(){ 
  32.   let t __messages = {}; 
  33.   return { 
  34.     regist: function(type, fn) { 
  35.       if(typeof __messages[type] === 'undefined') { 
  36.         messages[type] = [fn]; 
  37.       }else { 
  38.         __messages[type].push(fn); 
  39.       } 
  40.     }, 
  41.     fire: function(type, args) { 
  42.       if(!__messages[type]){ 
  43.         return 
  44.       } 
  45.       let events = { 
  46.         type: type, 
  47.         args: args || {} 
  48.       }, 
  49.       i = 0, 
  50.       len = __messages[type].length; 
  51.       for(;i
  52.         __messages[type][i].call(this, events); 
  53.       } 
  54.     }, 
  55.     remove: function(type, fn) { 
  56.       if(__messages[type] instanceof Array){ 
  57.         let i = __messages[type].length -1; 
  58.         for(;i>=0;i--){ 
  59.           __messages[type][i] === fn && __messages[type].splice(i, 1) 
  60.         } 
  61.       } 
  62.     } 
  63.   } 
  64. })(); 
  65.  
  66.  // 模板渲染方法 
  67.  function formatString(str, data) { 
  68.    return str.replace(/\{\{(\w+)\}\}/g, function(match, key) { 
  69.      return typeof data[key] === undefined ? '' : data[key
  70.    }) 
  71.  } 
  72.   
  73.  // 冒泡排序 
  74. function bubbleSort(arr) { 
  75.     for (let i = arr.length - 1; i > 0; i--) { 
  76.       for (let j = 0; j < i; j++) { 
  77.         if (arr[j] > arr[j + 1]) { 
  78.           swap(arr, j, j + 1); 
  79.         } 
  80.       } 
  81.     } 
  82.     return arr; 
  83.  
  84. // 置换函数 
  85. function swap(arr, indexA, indexB) { 
  86.     [arr[indexA], arr[indexB]] = [arr[indexB], arr[indexA]]; 
  87.  
  88. // 数组去重 
  89. function distinct(arr = testArr) { 
  90.     return arr.filter((v, i, array) => array.indexOf(v) === i) 

后期会继续总结更多工作中遇到的经典函数,也作为自己在工作中的一点总结。我们当然也可以直接使用lodash或ramda这些比较流行的函数式工具库,在这里仅做学习参考使用。

本文转载自微信公众号「趣谈前端」,可以通过以下二维码关注。转载本文请联系趣谈前端公众号。

 

来源:趣谈前端内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯