Javascript总结(常用工具类的封装)

前言

成都创新互联公司专注于红旗网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供红旗营销型网站建设,红旗网站制作、红旗网页设计、红旗网站官网定制、小程序制作服务,打造红旗网络公司原创品牌,更为您提供红旗网站排名全网营销落地服务。

因为工作中经常用到这些方法,所有便把这些方法进行了总结。

JavaScript

1. type 类型判断 

 
 
 
 
  1. isString (o) { //是否字符串  
  2.     return Object.prototype.toString.call(o).slice(8, -1) === 'String'  
  3. } 
  4.  
  5. isNumber (o) { //是否数字  
  6.     return Object.prototype.toString.call(o).slice(8, -1) === 'Number'  
  7. } 
  8.  
  9. isObj (o) { //是否对象  
  10.     return Object.prototype.toString.call(o).slice(8, -1) === 'Object'  
  11. } 
  12.  
  13. isArray (o) { //是否数组  
  14.     return Object.prototype.toString.call(o).slice(8, -1) === 'Array'  
  15. }  
  16. isDate (o) { //是否时间  
  17.     return Object.prototype.toString.call(o).slice(8, -1) === 'Date'  
  18. }  
  19. isBoolean (o) { //是否boolean  
  20.     return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'  
  21. }  
  22. isFunction (o) { //是否函数  
  23.     return Object.prototype.toString.call(o).slice(8, -1) === 'Function'  
  24. }  
  25. isNull (o) { //是否为null  
  26.     return Object.prototype.toString.call(o).slice(8, -1) === 'Null'  
  27. }  
  28. isUndefined (o) { //是否undefined  
  29.     return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'  
  30. }  
  31. isFalse (o) {  
  32.     if (!o || o === 'null' || o === 'undefined' || o === 'false' || o === 'NaN') return true 
  33.         return false  
  34. } 
  35.  
  36. isTrue (o) {  
  37.     return !this.isFalse(o)  
  38. } 
  39.  
  40. isIos () {  
  41.     var u = navigator.userAgent;  
  42.     if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {//安卓手机  
  43.         // return "Android";  
  44.         return false  
  45.     } else if (u.indexOf('iPhone') > -1) {//苹果手机  
  46.         // return "iPhone";  
  47.         return true  
  48.     } else if (u.indexOf('iPad') > -1) {//iPad  
  49.         // return "iPad";  
  50.         return false  
  51.     } else if (u.indexOf('Windows Phone') > -1) {//winphone手机  
  52.         // return "Windows Phone";  
  53.         return false  
  54.     }else{  
  55.         return false  
  56.     }  
  57. } 
  58.  
  59. isPC () { //是否为PC端  
  60.     var userAgentInfo = navigator.userAgent;  
  61.     var Agents = ["Android", "iPhone",  
  62.                 "SymbianOS", "Windows Phone",  
  63.                 "iPad", "iPod"];  
  64.     var flag = true;  
  65.     for (var v = 0; v < Agents.length; v++) {  
  66.         if (userAgentInfo.indexOf(Agents[v]) > 0) {  
  67.             flag = false;  
  68.             break;  
  69.         }  
  70.     }  
  71.     return flag;  
  72. } 
  73.  
  74. browserType(){  
  75.     var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串  
  76.     var isOpera = userAgent.indexOf("Opera") > -1; //判断是否Opera浏览器  
  77.     var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; //判断是否IE浏览器  
  78.     var isEdge = userAgent.indexOf("Edge") > -1; //判断是否IE的Edge浏览器  
  79.     var isFF = userAgent.indexOf("Firefox") > -1; //判断是否Firefox浏览器  
  80.     var isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1; //判断是否Safari浏览器  
  81.     var isChrome = userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1; //判断Chrome浏览器  
  82.     if (isIE) {  
  83.         var reIE = new RegExp("MSIE (\\d+\\.\\d+);");  
  84.         reIE.test(userAgent);  
  85.         var fIEVersion = parseFloat(RegExp["$1"]);  
  86.         if(fIEVersion == 7) return "IE7"  
  87.         else if(fIEVersion == 8) return "IE8";  
  88.         else if(fIEVersion == 9) return "IE9";  
  89.         else if(fIEVersion == 10) return "IE10";  
  90.         else if(fIEVersion == 11) return "IE11";  
  91.         else return "IE7以下"//IE版本过低  
  92.     } 
  93.  
  94.     if (isFF) return "FF";  
  95.     if (isOpera) return "Opera";  
  96.     if (isEdge) return "Edge";  
  97.     if (isSafari) return "Safari";  
  98.     if (isChrome) return "Chrome";  
  99. } 
  100.  
  101. checkStr (str, type) {  
  102.     switch (type) {  
  103.         case 'phone':   //手机号码  
  104.             return /^1[3|4|5|7|8][0-9]{9}$/.test(str);  
  105.         case 'tel':     //座机  
  106.             return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);  
  107.         case 'card':    //身份证  
  108.             return /^\d{15}|\d{18}$/.test(str);  
  109.         case 'pwd':     //密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线  
  110.             return /^[a-zA-Z]\w{5,17}$/.test(str)  
  111.         case 'postal':  //邮政编码  
  112.             return /[1-9]\d{5}(?!\d)/.test(str);  
  113.         case 'QQ':      //QQ号  
  114.             return /^[1-9][0-9]{4,9}$/.test(str); 
  115.         case 'email':   //邮箱  
  116.             return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);  
  117.         case 'money':   //金额(小数点2位)  
  118.             return /^\d*(?:\.\d{0,2})?$/.test(str);  
  119.         case 'URL':     //网址  
  120.             return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)  
  121.         case 'IP':      //IP  
  122.             return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);  
  123.         case 'date':    //日期时间  
  124.             return /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(str) || /^(\d{4})\-(\d{2})\-(\d{2})$/.test(str)  
  125.         case 'number':  //数字  
  126.             return /^[0-9]$/.test(str);  
  127.         case 'english': //英文  
  128.             return /^[a-zA-Z]+$/.test(str);  
  129.         case 'chinese': //中文  
  130.             return /^[\u4E00-\u9FA5]+$/.test(str);  
  131.         case 'lower':   //小写  
  132.             return /^[a-z]+$/.test(str);  
  133.         case 'upper':   //大写  
  134.             return /^[A-Z]+$/.test(str);  
  135.         case 'HTML':    //HTML标记  
  136.             return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);  
  137.         default:  
  138.             return true;  
  139.     }  
  140. } 

2. Date 

 
 
 
 
  1. /**  
  2.  * 格式化时间  
  3.  *   
  4.  * @param  {time} 时间  
  5.  * @param  {cFormat} 格式  
  6.  * @return {String} 字符串  
  7.  *  
  8.  * @example formatTime('2018-1-29', '{y}/{m}/{d} {h}:{i}:{s}') // -> 2018/01/29 00:00:00  
  9.  */  
  10. formatTime(time, cFormat) { 
  11.     if (arguments.length === 0) return null  
  12.     if ((time + '').length === 10) {  
  13.         time = +time * 1000  
  14.     }  
  15.  
  16.     var format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}', date  
  17.     if (typeof time === 'object') {  
  18.         date = time  
  19.     } else {  
  20.         date = new Date(time)  
  21.     }  
  22.  
  23.     var formatObj = {  
  24.         y: date.getFullYear(),  
  25.         m: date.getMonth() + 1,  
  26.         d: date.getDate(),  
  27.         h: date.getHours(),  
  28.         i: date.getMinutes(),  
  29.         s: date.getSeconds(),  
  30.         a: date.getDay()  
  31.     } 
  32.  
  33.     var time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {  
  34.         var value = formatObj[key]  
  35.         if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]  
  36.         if (result.length > 0 && value < 10) {  
  37.             value = '0' + value  
  38.         } 
  39.          return value || 0  
  40.     })  
  41.     return time_str  
  42. } 
  43.  
  44. /**  
  45.  * 返回指定长度的月份集合  
  46.  *   
  47.  * @param  {time} 时间  
  48.  * @param  {len} 长度  
  49.  * @param  {direction} 方向:  1: 前几个月;  2: 后几个月;  3:前后几个月  默认 3  
  50.  * @return {Array} 数组  
  51.  *   
  52.  * @example   getMonths('2018-1-29', 6, 1)  // ->  ["2018-1", "2017-12", "2017-11", "2017-10", "2017-9", "2017-8", "2017-7"]  
  53.  */ 
  54.  
  55. getMonths(time, len, direction) {  
  56.     var mm = new Date(time).getMonth(),  
  57.         yy = new Date(time).getFullYear(),  
  58.         direction = isNaN(direction) ? 3 : direction,  
  59.         index = mm;  
  60.     var cutMonth = function(index) {  
  61.         if ( index <= len && index >= -len) {  
  62.             return direction === 1 ? formatPre(index).concat(cutMonth(++index)):  
  63.                 direction === 2 ? formatNext(index).concat(cutMonth(++index)):formatCurr(index).concat(cutMonth(++index))  
  64.         }  
  65.         return []  
  66.     }  
  67.     var formatNext = function(i) {  
  68.         var y = Math.floor(i/12), 
  69.             m = i%12  
  70.         return [yy+y + '-' + (m+1)]  
  71.     } 
  72.  
  73.     var formatPre = function(i) {  
  74.         var y = Math.ceil(i/12),  
  75.             m = i%12  
  76.         m = m===0 ? 12 : m  
  77.         return [yy-y + '-' + (13 - m)]  
  78.     }  
  79.     var formatCurr = function(i) {  
  80.         var y = Math.floor(i/12),  
  81.             yNext = Math.ceil(i/12),  
  82.             m = i%12,  
  83.             mNext = m===0 ? 12 : m  
  84.         return [yy-yNext + '-' + (13 - mNext),yy+y + '-' + (m+1)]  
  85.     } 
  86.     // 数组去重  
  87.     var unique = function(arr) {  
  88.         if ( Array.hasOwnProperty('from') ) {  
  89.             return Array.from(new Set(arr));  
  90.         }else{  
  91.             var n = {},r=[];   
  92.             for(var i = 0; i < arr.length; i++){  
  93.                 if (!n[arr[i]]){  
  94.                     n[arr[i]] = true;   
  95.                     r.push(arr[i]);  
  96.                 }  
  97.             }  
  98.             return r;  
  99.         }  
  100.     }  
  101.     return direction !== 3 ? cutMonth(index) : unique(cutMonth(index).sort(function(t1, t2){  
  102.         return new Date(t1).getTime() - new Date(t2).getTime()  
  103.     }))  
  104. }  
  105.  
  106. /**  
  107.  * 返回指定长度的天数集合  
  108.  *   
  109.  * @param  {time} 时间 
  110.  * @param  {len} 长度  
  111.  * @param  {direction} 方向: 1: 前几天;  2: 后几天;  3:前后几天  默认 3  
  112.  * @return {Array} 数组  
  113.  *  
  114.  * @example date.getDays('2018-1-29', 6) // -> ["2018-1-26", "2018-1-27", "2018-1-28", "2018-1-29", "2018-1-30", "2018-1-31", "2018-2-1"]  
  115.  */  
  116. getDays(time, len, diretion) {  
  117.     var tt = new Date(time)  
  118.     var getDay = function(day) {  
  119.         var t = new Date(time)  
  120.         t.setDate(t.getDate() + day)  
  121.         var m = t.getMonth()+1  
  122.         return t.getFullYear()+'-'+m+'-'+t.getDate()  
  123.     }  
  124.     var arr = []  
  125.     if (diretion === 1) {  
  126.         for (var i = 1; i <= len; i++) {  
  127.             arr.unshift(getDay(-i))  
  128.         }  
  129.     }else if(diretion === 2) {  
  130.         for (var i = 1; i <= len; i++) {  
  131.             arr.push(getDay(i))  
  132.         } 
  133.      }else {  
  134.         for (var i = 1; i <= len; i++) {  
  135.             arr.unshift(getDay(-i))  
  136.         }  
  137.         arr.push(tt.getFullYear()+'-'+(tt.getMonth()+1)+'-'+tt.getDate())  
  138.         for (var i = 1; i <= len; i++) {  
  139.             arr.push(getDay(i))  
  140.         }  
  141.     }  
  142.     return diretion === 1 ? arr.concat([tt.getFullYear()+'-'+(tt.getMonth()+1)+'-'+tt.getDate()]) :  
  143.         diretion === 2 ? [tt.getFullYear()+'-'+(tt.getMonth()+1)+'-'+tt.getDate()].concat(arr) : arr  
  144. } 
  145. /**  
  146.  * @param  {s} 秒数  
  147.  * @return {String} 字符串   
  148.  *  
  149.  * @example formatHMS(3610) // -> 1h0m10s  
  150.  */  
  151. formatHMS (s) {  
  152.     var str = ''  
  153.     if (s > 3600) {  
  154.         str = Math.floor(s/3600)+'h'+Math.floor(s%3600/60)+'m'+s%60+'s' 
  155.     }else if(s > 60) {  
  156.         str = Math.floor(s/60)+'m'+s%60+'s'  
  157.     }else{ 
  158.          str = s%60+'s'  
  159.     }  
  160.     return str  
  161. }  
  162.  
  163. /*获取某月有多少天*/  
  164. getMonthOfDay (time) {  
  165.     var date = new Date(time)  
  166.     var year = date.getFullYear()  
  167.     var mouth = date.getMonth() + 1  
  168.     var days  
  169.  
  170.     //当月份为二月时,根据闰年还是非闰年判断天数  
  171.     if (mouth == 2) {  
  172.         days = year % 4 == 0 ? 29 : 28  
  173.     } else if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12) {  
  174.         //月份为:1,3,5,7,8,10,12 时,为大月.则天数为31; 
  175.         days = 31  
  176.     } else {  
  177.         //其他月份,天数为:30.  
  178.         days = 30  
  179.     }  
  180.     return days  
  181. } 
  182.  
  183. /*获取某年有多少天*/  
  184. getYearOfDay (time) {  
  185.     var firstDayYear = this.getFirstDayOfYear(time);  
  186.     var lastDayYear = this.getLastDayOfYear(time);  
  187.     var numSecond = (new Date(lastDayYear).getTime() - new Date(firstDayYear).getTime())/1000;  
  188.     return Math.ceil(numSecond/(24*3600));  
  189. } 
  190. /*获取某年的第一天*/  
  191. getFirstDayOfYear (time) {  
  192.     var year = new Date(time).getFullYear();  
  193.     return year + "-01-01 00:00:00";  
  194. }   
  195.  
  196. /*获取某年最后一天*/  
  197. getLastDayOfYear (time) {  
  198.     var year = new Date(time).getFullYear();  
  199.     var dateString = year + "-12-01 00:00:00";  
  200.     var endDay = this.getMonthOfDay(dateString); 
  201.     return year + "-12-" + endDay + " 23:59:59";  
  202. } 
  203.  
  204. /*获取某个日期是当年中的第几天*/  
  205. getDayOfYear (time) {  
  206.     var firstDayYear = this.getFirstDayOfYear(time); 
  207.     var numSecond = (new Date(time).getTime() - new Date(firstDayYear).getTime())/1000;  
  208.     return Math.ceil(numSecond/(24*3600));  
  209. }  
  210.  
  211. /*获取某个日期在这一年的第几周*/  
  212. getDayOfYearWeek (time) {  
  213.     var numdays = this.getDayOfYear(time);  
  214.     return Math.ceil(numdays / 7);  
  215. } 

3. Array 

 
 
 
 
  1. /*判断一个元素是否在数组中*/  
  2. contains (arr, val) {  
  3.     return arr.indexOf(val) != -1 ? true : false;  
  4. } 
  5.  
  6. /**  
  7.  * @param  {arr} 数组  
  8.  * @param  {fn} 回调函数  
  9.  * @return {undefined}  
  10.  */  
  11. each (arr, fn) {  
  12.     fn = fn || Function;  
  13.     var a = [];  
  14.     var args = Array.prototype.slice.call(arguments, 1);  
  15.     for(var i = 0; i < arr.length; i++) {  
  16.         var res = fn.apply(arr, [arr[i], i].concat(args));  
  17.         if(res != null) a.push(res);  
  18.     }  
  19. }  
  20.  
  21. /**  
  22.  * @param  {arr} 数组  
  23.  * @param  {fn} 回调函数  
  24.  * @param  {thisObj} this指向  
  25.  * @return {Array}   
  26.  */  
  27. map (arr, fn, thisObj) {  
  28.     var scope = thisObj || window;  
  29.     var a = [];  
  30.     for(var i = 0, j = arr.length; i < j; ++i) {  
  31.         var res = fn.call(scope, arr[i], i, this);  
  32.         if(res != null) a.push(res);  
  33.     }  
  34.     return a;  
  35. } 
  36.  
  37. /**  
  38.  * @param  {arr} 数组  
  39.  * @param  {type} 1:从小到大   2:从大到小   3:随机  
  40.  * @return {Array}  
  41.  */  
  42. sort (arr, type = 1) {  
  43.     return arr.sort( (a, b) => {  
  44.         switch(type) {  
  45.             case 1:  
  46.                 return a - b;  
  47.             case 2:  
  48.                 return b - a;  
  49.             case 3:  
  50.                 return Math.random() - 0.5;  
  51.             default:  
  52.                 return arr;  
  53.         }  
  54.     })  
  55. }   
  56.  
  57. /*去重*/  
  58. unique (arr) { 
  59.     if ( Array.hasOwnProperty('from') ) {  
  60.         return Array.from(new Set(arr));  
  61.     }else{  
  62.         var n = {},r=[];   
  63.         for(var i = 0; i < arr.length; i++){  
  64.             if (!n[arr[i]]){  
  65.                 n[arr[i]] = true;   
  66.                 r.push(arr[i]);  
  67.             }  
  68.         }  
  69.         return r;  
  70.     }  
  71. }  
  72.  
  73. /*求两个集合的并集*/  
  74. union (a, b) {  
  75.     var newArr = a.concat(b);  
  76.     return this.unique(newArr);  
  77. }  
  78.  
  79. /*求两个集合的交集*/  
  80. intersect (a, b) {  
  81.     var _this = this;  
  82.     a = this.unique(a);  
  83.     return this.map(a, function(o) {  
  84.         return _this.contains(b, o) ? o : null;  
  85.     });  
  86. } 
  87.  
  88. /*删除其中一个元素*/  
  89. remove (arr, ele) {  
  90.     var index = arr.indexOf(ele);  
  91. 名称栏目:Javascript总结(常用工具类的封装)
    地址分享:http://bzwzjz.com/article/djsppjc.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都网站建设 成都网站建设 成都响应式网站建设公司 成都网站制作 营销网站建设 网站建设费用 高端定制网站设计 重庆网站制作 成都品牌网站建设 成都网站设计公司 定制网站设计 H5网站制作 温江网站设计 成都企业网站制作 网站制作公司 成都响应式网站建设 达州网站设计 外贸营销网站建设 成都定制网站建设 成都企业网站设计 移动手机网站制作 网站建设