JavaScript常用工具类整理(总结版)

导读:在前端开发过程中需要对常用的功能模块进行封装,常用的方法多次调用需要整合,保证组件的复用性与程序的可维护性,这里总结一下,便于后续的使用!

 

目录

1.全局声明工具类

2.定时器

3.判断变量是否是一个值

4.判断变量是否为空

5.判断变量是否为一个数组

6.输入对象

7.将object对象转化为数组

8.对象转字符串

9.json字符串转json对象

10.判断是否为数字

11.判断是否为整型

12.判断是否为浮点型

13.手机号验证

14.文本输入校验(中文、数字、字母、下划线、中文标点符号。 ;  , : “ ”( ) 、 ? 《 》)

15.左填充(str 原字符串,len 目标长度,pad 填充的字符(默认:空格))

16.右填充

17.消除空格

18.json对象转form数据

19.IP有效验证

20.ASCII转HEX

21.HEX转ASCII

22.金额自动加","分割(v_money 要格式化的金额,need_dot 是否需要精确到小数点后2位,{String} 格式化以后的金额,如:1,234,567.08)

 23.把金额数字转换为中文大写金额

24.生成验证码(len 验证码长度(默认:6),{String} 生成的验证码,)

25.格式化账号显示(4位加空格)

26.格式化户名显示,2字屏蔽第1位,用*号代替,3字屏蔽第2位,用*号代替,3字以上,显示第1位和最后1位,其余用*号代替,最多使用5位*。

27.字符串替换

28.生成UUID(len UUID长度,默认标准36位,radix UUID基数,默认16)

29.随机数生成36位UUID

30.解析json,结果返回

31.金额数据分转元

32.金额数据元转分

33.两个浮点型相减,不丢失精度

34. 两个浮点型相加,不丢失精度

35.按长度数组截取字符串,返回按长度分割成的字符串数组

36.按多长间隔截取字符串,n为长度,返回按长度分割成的字符串数组

37.格式化字符串

38.存期格式化

39.计算总页数,根据总条数和每页显示数(totalpage:总条数,pagesize:每页显示条数)

 40.将‘YYYYMMDD’格式的字符串格式化成‘YYYY-MM-DD’的格式

41.理财,将币种(数字)转为汉字

42.H5获取自己本地IP地址

43.通过http请求获取文本数据

44.数组转对象

45.精准乘法

46.判断当前浏览器环境

47. 播放语音(src 语音文件url)

48.检测操作系统版本号(Mac | Unix | Android | Linux | Win2000 | WinXP | Win2003 | WinVistta | Win7 | Win10 | Volcano | other)

49.判断应用部署模式(CS | BS)

50.获取JS字符串字节数,str 要计算的字符串(str的字节数,中文占2个字节,英文占1个字节)

51.格式化手机号(11位手机号)

52.左补两位

53.hex -> dsp(hex 十六进制压缩码 如[0x12, 0x34, 0x56], dsp 如 "123456")

54.dsp -> hex 

55.分量亦或合成(itemA 分量A,itemB 分量B,bDsp 是否扩展 true,则传入的itemA与itemB与返回的合成变量都为扩展码,否则都为Uint8Array类型的压缩码数组)


 

1.全局声明工具类

window.$App = window.$App || {};window.$App.AppUtils = (function () {let apputils = {};
}

2.定时器

 /*** 定时器* @class Timer */apputils.Timer = ClassLoader.create();apputils.Timer.prototype = {initialize: function ($, A, _) {this._h = null;this.callback = $;this.interval = A;this.loop = _ ? true : false;this.running = false},onTimer: function () {if (!this.running) {try {this.running = true;this.callback();} finally {this.running = false;}}if (this.loop == false) {this.stop();}},stop: function () {clearInterval(this._h);},start: function () {this.stop();this._h = setInterval(this.onTimer.bind(this), this.interval * 1000);}};/*** 启动定时器* @param {*} times 倒计时时间,单位:秒* @param {*} callback 倒计时完成回调函数* @param {*} repeat 是否循环执行* @returns {object} 定时器对象,支持方法:start、stop* @function startTimer*/apputils.startTimer = function (times, callback, repeat) {try {var timer = new this.Timer(function () {callback();}, times, repeat);timer.start();return timer;} catch (ajaxException) {alert(ajaxException.message);}return null;};

3.判断变量是否是一个值

function (o) {return typeof (o) !== 'undefined' && o !== null ? true : false;};

4.判断变量是否为空

function (val) {var regu = "^[ ]+$";var re = new RegExp(regu);return val == null || typeof (val) == 'undefined' || val == "" || re.test(val);};

5.判断变量是否为一个数组

function (o) {return this.isvalue(o) ? Object.prototype.toString.apply(o) === '[object Array]' :false;};

6.输入对象

 function (o) {return this.isarray(o) ? o.length : -1;};

7.将object对象转化为数组

function (o) {return this.isarray(o) ? o : new Array();};

8.对象转字符串

function (o) {var str = "";if (this.isvalue(o)) {var t = Object.prototype.toString.apply(o);if (t === '[object Array]') {let a = [];for (var i = 0; i < o.length; i++) {/*** 此处原方法为a.push(this.tostring(o[i]));* 当o为字符串数组是,返回的结果出错,因此做了如下修改*/if (this.tostring(o[i]).charAt(0) == '{') { //o为json数组时a.push(this.tostring(o[i]));} else { //o为字符串数组时a.push('"' + this.tostring(o[i]) + '"');}}str = '[' + a.join(',') + ']';a.length = 0;// a = null;} else if (t === '[object Date]') {var y = o.getFullYear();if (y < 1900) {y += 1900;}var m = o.getMonth() + 1;str = y + "-" + this.lpad(m, 2, '0') + "-" +this.lpad(o.getDate(), 2, '0') + " " +this.lpad(o.getHours(), 2, '0') + ":" +this.lpad(o.getMinutes(), 2, '0') + ":" +this.lpad(o.getSeconds(), 2, '0');} else if (t === '[object Object]') {let a = [],k;for (k in o) {var vt = Object.prototype.toString.apply(o[k]);if (vt === '[object Array]' || vt === '[object Object]') {a.push('"' + k + '":' + this.tostring(o[k]));} else {a.push('"' + k + '":"' + this.tostring(o[k]) + '"');}}str = '{' + a.join(',') + '}';a.length = 0;// a = null;} else {str = String(o);}}return str;};

9.json字符串转json对象

function (str) {if (str == null || str == "") {return "";}if (str.charAt(0) != '(') {str = "(" + str + ")";}return eval(str);};

10.判断是否为数字

function (str) {var regu = /^(\d+)$/;return regu.test(str);};

11.判断是否为整型

function (str) {var regu = /^[-]{0,1}[0-9]{1,}$/;return regu.test(this.val(str));};

12.判断是否为浮点型

function (str) {if (this.isint(str))return true;var re = /^[-]{0,1}(\d+)[.]+(\d+)$/;if (re.test(str)) {if (RegExp.$1 == 0 && RegExp.$2 == 0)return false;return true;} else {return false;}};

13.手机号验证

function (s) {var patrn = /^(13[0-9]|14[0-9]|15[0-9]|17[0-9]|18[0-9])\d{8}$/;return patrn.exec(s);};

14.文本输入校验(中文、数字、字母、下划线、中文标点符号。 ;  , : “ ”( ) 、 ? 《 》)

function (s) {var patrn = /^[\u4e00-\u9fa5_a-zA-Z0-9_\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]*$/;return patrn.exec(s);};

15.左填充(str 原字符串,len 目标长度,pad 填充的字符(默认:空格))

function (str, len, pad) {str = this.tostring(str);if (typeof (len) === "undefined") {len = 0;}if (typeof (pad) === "undefined") {pad = ' ';}if (len + 1 >= str.length) {str = Array(len + 1 - str.length).join(pad) + str;}return str;};

16.右填充

function (str, len, pad) {str = this.tostring(str);if (typeof (len) === "undefined") {len = 0;}if (typeof (pad) === "undefined") {pad = ' ';}if (len + 1 >= str.length) {str = str + Array(len + 1 - str.length).join(pad);}return str;};

17.消除空格

function (text) {return (text || "").replace(/^\s+|\s+$/g, "");};

18.json对象转form数据

 function (json) {var str = "";for (var i in json) {str += "&" + i + "=" + json[i];}if (str.length > 1) {str = str.substring(1);}return str;};

19.IP有效验证

function (ip) {var re = /(\d+)\.(\d+)\.(\d+)\.(\d+)/g; //匹配IP地址的正则表达式if (re.test(ip)) {var arr = ip.split(".");if (arr[0] > 254 || arr[1] > 254 || arr[2] > 254 || arr[3] > 254)return false;return true;} else {return false;}}

20.ASCII转HEX

function (str) {if (!this.isvalue(str)) {return "";}var hex = "";for (var i = 0; i < str.length; ++i) {hex += str.charCodeAt(i).toString(16);}return hex;}

21.HEX转ASCII

function (hex) {if (!this.isvalue(hex) || hex.length % 2 != 0) {return "";}var str = "";for (var i = 0; i < hex.length / 2; ++i) {var tmp = "0x" + hex[i * 2] + hex[i * 2 + 1];var charValue = String.fromCharCode(Number(tmp));str += charValue;}return str;}

22.金额自动加","分割(v_money 要格式化的金额,need_dot 是否需要精确到小数点后2位,{String} 格式化以后的金额,如:1,234,567.08)

function (v_money, need_dot) {try {var p_number = parseFloat(v_money);if(isNaN(p_number)) {return v_money;}var p_string = "" + p_number;var p_idx = p_string.lastIndexOf(".");if (p_idx < 0) {p_idx = p_string.length;p_string = p_string + ".00";} else {var sarray = p_string.split('.');if (sarray[1] == '') {p_string = p_string + "00";} else if (sarray[1].length == 1) {p_string = p_string + "0";}}var p_ret = p_string.substring(p_idx);var p_temp = p_string.substring(0, p_idx);var p_length = p_temp.length;var p_count = Math.ceil(p_length / 3);for (var p_i = 0; p_i < p_count; p_i++) {var p_start_i = p_length - (p_i + 1) * 3;p_ret = p_temp.substring(p_start_i, p_start_i + 3) + p_ret;if (p_i < p_count - 1) {p_ret = "," + p_ret;}}if (need_dot == false) {var len = p_ret.indexOf(".");p_ret = p_ret.substring(0, len);}return p_ret;} catch (p_ee) {return "";}};

 23.把金额数字转换为中文大写金额

function (n) {var fraction = ['角', '分'];var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];var unit = [['元', '万', '亿'],['', '拾', '佰', '仟']];var head = n < 0 ? '欠' : '';n = Math.abs(n);var s = '';for (let i = 0; i < fraction.length; i++) {s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');}s = s || '整';n = Math.floor(n);for (let i = 0; i < unit[0].length && n > 0; i++) {var p = '';for (var j = 0; j < unit[1].length && n > 0; j++) {p = digit[n % 10] + unit[1][j] + p;n = Math.floor(n / 10);}s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;}return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');};

24.生成验证码(len 验证码长度(默认:6),{String} 生成的验证码,)

function (len) {var charactors = "1234567890";var value = '';if (!this.isint(len)) {len = 6;}for (let j = 1; j <= len; j++) {var i = parseInt(10 * Math.random());value = value + charactors.charAt(i);}return value;};

25.格式化账号显示(4位加空格)

function (account) {if (!this.isvalue(account)) {return "";}if(account.startsWith("1")){if(account.length >= 17){account=account.substring(0,6)+"******"+account.substring(account.length-5);}}if(account.startsWith("6")){if(account.length >= 16){account=account.substring(0,4)+" **** **** "+account.substring(account.length-4);}}return account;};

26.格式化户名显示,2字屏蔽第1位,用*号代替,3字屏蔽第2位,用*号代替,3字以上,显示第1位和最后1位,其余用*号代替,最多使用5位*。

function (name) {if (!this.isvalue(name)) {return "";}var res = "";if (name.length == 1) {res += name;}if (name.length == 2) {res += "*";res += name.substring(name.length - 1);}if (name.length == 3) {res += name.substring(0, 1);res += "*";res += name.substring(2);}if (name.length > 3) {res += name.substring(0, 1);for(let i=0; i<name.length - 2; i++) {if(i <= 4) {res += "*";} else {break;}}res += name.substring(name.length - 1, name.length);}return res;};

27.字符串替换

function (sourceString, startPos, encryptCount, encryptChar) {if (typeof sourceString != 'string')return sourceString;if (sourceString.length <= 0)return sourceString;if (typeof startPos != 'number')return sourceString;if (startPos <= 0)return sourceString;if (typeof encryptCount != 'number')return sourceString;if (encryptCount <= 0)return sourceString;if (startPos > sourceString.length)return sourceString;if ((startPos + encryptCount) > sourceString.length + 1)return sourceString;var str1 = sourceString.substr(0, startPos - 1);var str2 = sourceString.substr(startPos - 1, sourceString.length - startPos + 1);var str3 = '';var str4 = str2.substr(encryptCount, str2.length - encryptCount);for (var i = 0; i < encryptCount; i++) {str3 = str3 + encryptChar;}return str1 + str3 + str4;};

28.生成UUID(len UUID长度,默认标准36位,radix UUID基数,默认16)

function (len, radix) {var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');var uuid = [],i;radix = radix || chars.length;if (len) {// Compact formfor (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];} else {// rfc4122, version 4 formvar r;// rfc4122 requires these charactersuuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';uuid[14] = '4';// Fill in random data. At i==19 set the high bits of clock sequence as// per rfc4122, sec. 4.1.5for (i = 0; i < 36; i++) {if (!uuid[i]) {r = 0 | Math.random() * 16;uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];}}}return uuid.join('');};

29.随机数生成36位UUID

function () {var s4 = function () {return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);}return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();};

30.解析json,结果返回

function (str) {if (typeof str == 'string') {try {var obj = JSON.parse(str);if (typeof obj == 'object' && obj) {return obj;} else {return false;}} catch (e) {return false;}} else if (typeof str == 'object') {console.log('It is a object already!');return str;}console.log('It is not a string!')};

31.金额数据分转元

function (money) {if (typeof money == 'string') {money = money.split(".").join("");//去调小数点var money2 = parseInt(money);money2 = money2.toString();if (money2.length > 2) {money2 = money2.substring(0, money2.length - 2) + "." + money2.substring(money2.length - 2, money2.length);} else if (money2 == 0) {money2 = "0.00";} else if (money2.length == 2) {money2 = "0." + money2;} else if (money2.length == 1) {money2 = "0.0" + money2;}return money2;}console.log('It is not a string!')};

32.金额数据元转分

function (money) {if (typeof money == 'string') {var money2 = money.replaceAll(",", "");if (money2.indexOf(".") < 0) {money2 = money2 + "00"} else if (money2.length - money2.indexOf(".") == 2) {//一位小数money2 = money2.replace(".", "") + '0';} else {//两位小数money2 = money2.replace(".", "");}return money2;}console.log('It is not a string!')};

33.两个浮点型相减,不丢失精度

function (arg1, arg2) {var r1, r2, m, n;try {r1 = arg1.toString().split(".")[1].length} catch (error) {r1 = 0}try {r2 = arg2.toString().split(".")[1].length} catch (error) {r2 = 0}m = Math.pow(10, Math.max(r1, r2));n = (r1 >= r2) ? r1 : r2;return ((arg1 * m - arg2 * m) / m).toFixed(n);};

34. 两个浮点型相加,不丢失精度

function (arg1, arg2) {var r1, r2, m, n;try {r1 = arg1.toString().split(".")[1].length} catch (error) {r1 = 0}try {r2 = arg2.toString().split(".")[1].length} catch (error) {r2 = 0}m = Math.pow(10, Math.max(r1, r2));n = (r1 >= r2) ? r1 : r2;return ((arg1 * m + arg2 * m) / m).toFixed(n);};

35.按长度数组截取字符串,返回按长度分割成的字符串数组

function (str, lens) {var arr = [];var len = lens.length;for (var i = 0; i < len; i++) {if (str.length >= lens[i]) {var strCut = str.substring(0, lens[i]);arr.push(strCut);str = str.substring(lens[i]);} else {// str = str;arr.push(str);}}return arr;};

36.按多长间隔截取字符串,n为长度,返回按长度分割成的字符串数组

function (n) {var str = this;var arr = [];var len = Math.ceil(str.length / n);for (var i = 0; i < len; i++) {if (str.length >= n) {var strCut = str.substring(0, n);arr.push(strCut);str = str.substring(n);} else {// str = str;arr.push(str);}}return arr;};

37.格式化字符串

function (fmtStr, obj) {if (!fmtStr.formatStr) {String.prototype.formatStr = function (argsObj) {var regexp = /\{(\d+)\}/g;var args = argsObj || [];var result = this.replace(regexp, function (m, i, o, n) {// console.log(o + n)return args[i];});return result.replace('%', "'");};}return fmtStr.formatStr(obj);};

38.存期格式化

function (trm) {var trmStr = '';console.log("trm==" + trm);var trms = trm.split('D');if (trms.length == 2 && trms[0].indexOf('M') != -1) {var mon = trms[0].substring(1, trms[0].length);console.log("mon==" + mon);var month = parseInt(mon);if (month < 12) {if (month != 0) {trmStr += month + "个月";}} else {if (month % 12 == 0) {trmStr += parseInt(month / 12) + "年";} else {trmStr += parseInt(month / 12) + "年" + parseInt(month % 12) + "个月";}}if (parseInt(trms[1]) > 0) {if (trmStr) {trmStr += "零";}trmStr += parseInt(trms[1]) + "天";}}return trmStr;};

39.计算总页数,根据总条数和每页显示数(totalpage:总条数,pagesize:每页显示条数)

function (totalcount, pagesize) {var p = (parseInt(totalcount) + parseInt(pagesize) - 1) / parseInt(pagesize);return parseInt(p);};

 40.将‘YYYYMMDD’格式的字符串格式化成‘YYYY-MM-DD’的格式

function (dateStr) {var date = dateStr;if (date.length == 8) {date = date.substring(0, 4) + "-" + date.substring(4, 6) + "-" + date.substring(6, 8);}return date;};

41.理财,将币种(数字)转为汉字

function (ccycd) {var ccycdstr = "";switch (ccycd) {case "156":ccycdstr = "人民币元";break;case "250":ccycdstr = "法国法郎";break;case "246":ccycdstr = "马克";break;case "344":ccycdstr = "香港元";break;case "392":ccycdstr = "日元";break;case "826":ccycdstr = "英镑";break;case "840":ccycdstr = "美元";break;case "978":ccycdstr = "欧元";break;default:// ccycdstr = "";break;}return ccycdstr;}

42.H5获取自己本地IP地址

function grabLocalIps(onNewIP) { //  onNewIp - your listener function for new IPsvar myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chromevar pc = new myPeerConnection({iceServers: []}), // 空的ICE服务器(STUN或者TURN)noop = function () { },localIPs = {}, //记录有没有被调用到onNewIP这个listener上ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g;function ipIterate(ip) {if (!localIPs[ip]) onNewIP(ip);localIPs[ip] = true;}pc.createDataChannel(""); //create a bogus data channelvar handle = function (sdp) {sdp.sdp.split('\n').forEach(function (line) {if (line.indexOf('candidate') < 0) return;line.match(ipRegex).forEach(ipIterate);});pc.setLocalDescription(sdp, noop, noop);}// "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"if (navigator.userAgent.match(/^volcano.*/) ||navigator.userAgent.match(/Chrome\/\d*\./) && navigator.userAgent.match(/Chrome\/\d*\./)[0] <= 'Chrome/50.') {pc.createOffer(handle);} else {pc.createOffer().then(handle); // create offer and set local description}pc.onicecandidate = function (ice) { //listen for candidate eventsif (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;ice.candidate.candidate.match(ipRegex).forEach(ipIterate);};}

43.通过http请求获取文本数据

function (url, sendData) {let promise = new Promise((resolve, reject) => {try {let response = "";let xmlhttp = new XMLHttpRequest();xmlhttp.onreadystatechange = function () {if (xmlhttp.status == 200 || xmlhttp.status == 0) {response = xmlhttp.responseText;if ('' !== response) {resolve({ status: xmlhttp.status, response });}} else if (xmlhttp.status == 400) {console.warn("Bad Request(parameter is not json format)");reject({ status: xmlhttp.status, response });} else if (xmlhttp.status == 500) {console.warn("Bad Request(parameter is not json array)");reject({ status: xmlhttp.status, response });} else {reject({ status: xmlhttp.status, response });}}xmlhttp.open("GET", url, true);xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");xmlhttp.send(sendData);} catch (e) {reject(e)}})return promise}

44.数组转对象

function (list, key) {var object = {};if (!list) {return object;}for (var elemInx in list) {var elem = list[elemInx];if (!elem[key]) {return null;}object[elem[key]] = elem;}return object;}

45.精准乘法

function (arg1, arg2) {let m = 0,s1 = arg1.toString(),s2 = arg2.toString();try {m += s1.split(".")[1].length;} catch (e) {console.error("accMul.s1.split:", e);}try {m += s2.split(".")[1].length;} catch (e) {console.error("accMul.s2.split:", e);}return ((Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) /Math.pow(10, m));}

46.判断当前浏览器环境

function ($) {if ($ == "ie") {if (navigator.appName.indexOf("Microsoft") != -1)return true}else if ($ == "ns")if (navigator.appName.indexOf("Netscape") != -1)return true;return false};

47. 播放语音(src 语音文件url)

function (src) {let _ = window.document.getElementById("sound");try {if (this.env("ie")) {if (_ == null) {let bgSoundObj = window.document.createElement("bgsound")bgSoundObj.id = "sound";bgSoundObj.src = "";_ = bgSoundObj;}_.src = src;} else {if (_ == null) {let audioObj = window.document.createElement("audio")audioObj.id = "sound";audioObj.src = "";_ = audioObj;}_.src = src;_.play();}} catch (error) {console.error(error);}};try {apputils.speaker = new window.SpeechSynthesisUtterance();} catch (error) {apputils.speaker = {};}apputils.speakTimer = null;apputils.stopTimer = null;

48.检测操作系统版本号(Mac | Unix | Android | Linux | Win2000 | WinXP | Win2003 | WinVistta | Win7 | Win10 | Volcano | other)

function detectOS() {var sUserAgent = navigator.userAgent;var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows");var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC") || (navigator.platform == "Macintosh") || (navigator.platform == "MacIntel");if (isMac) return "Mac";var isUnix = (navigator.platform == "X11") && !isWin && !isMac;if (isUnix) return "Unix";var isLinux = (String(navigator.platform).indexOf("Linux") > -1);var bIsAndroid = sUserAgent.toLowerCase().match(/android/i) == "android";if (isLinux) {if (bIsAndroid) return "Android";else return "Linux";}if (isWin) {var isWin2K = sUserAgent.indexOf("Windows NT 5.0") > -1 || sUserAgent.indexOf("Windows 2000") > -1;if (isWin2K) return "Win2000";var isWinXP = sUserAgent.indexOf("Windows NT 5.1") > -1 ||sUserAgent.indexOf("Windows XP") > -1;if (isWinXP) return "WinXP";var isWin2003 = sUserAgent.indexOf("Windows NT 5.2") > -1 || sUserAgent.indexOf("Windows 2003") > -1;if (isWin2003) return "Win2003";var isWinVista = sUserAgent.indexOf("Windows NT 6.0") > -1 || sUserAgent.indexOf("Windows Vista") > -1;if (isWinVista) return "WinVista";var isWin7 = sUserAgent.indexOf("Windows NT 6.1") > -1 || sUserAgent.indexOf("Windows 7") > -1;if (isWin7) return "Win7";var isWin10 = sUserAgent.indexOf("Windows NT 10.0") > -1 || sUserAgent.indexOf("Windows 10") > -1;if (isWin10) return "Win10";var isVolcano = sUserAgent.indexOf("volcano") > -1;if (isVolcano) return "Volcano";return "Windows";}return "other";};

49.判断应用部署模式(CS | BS)

function getDeployMode() {let href = window.location.href;ContextUtils.localUtils.set("versionCheckPath", href)let str = href.substring(0, 4);if (str !== '') {if (str == 'http') {let httpadd = href.split('//')[1];if (httpadd.split(':') !== -1) {let ipAddress = httpadd.split(':')[0];if (ipAddress == 'localhost') {return 'CS'} else {if (ipAddress.split('.')[0] == '127') {return 'CS'} else {return 'BS'}}}return '';}if (str == 'file') return 'CS'return ''}return '';}

50.获取JS字符串字节数,str 要计算的字符串(str的字节数,中文占2个字节,英文占1个字节)

function getStrByteLen(str) {let len = 0;if(str && typeof str == "string") {for(let i = 0; i < str.length; i++) {if(str.charCodeAt(i) > 255) {len += 2;} else {len += 1;}}}return len;}

51.格式化手机号(11位手机号)

function formatMobile(mobile) {let str = 0;if(mobile && typeof mobile == "string" && mobile.length == 11) {str = mobile.substring(0, 3) + " " + mobile.substring(3, 7) + " " + mobile.substring(7)}return str;}

52.左补两位

function (str){if(str.length === 1){return "0" + str;}return str}

53.hex -> dsp(hex 十六进制压缩码 如[0x12, 0x34, 0x56], dsp 如 "123456")

function hex2Dsp(hex, lowerCase) {let dsp = []if(!hex || hex.length <= 0) {console.error(`传入的hex为空或长度为0`);return "";}hex.forEach(item => {dsp.push(this.leftPad2Bit(item.toString(16)));})let dspStr = dsp.join("");if(lowerCase) {dspStr = dspStr.toLowerCase();} else {dspStr = dspStr.toUpperCase();}return dspStr;}

54.dsp -> hex 

function (dsp) {let bytes;if(dsp && dsp.length % 2 === 0) {bytes = new Uint8Array(dsp.length / 2);for (let index = 0; index < dsp.length; index+=2) {let b = parseInt(dsp.substr(index, 2), 16);bytes[index/2] = b;}} else {console.error(`传入的dsp非法,为空或者非偶数倍长度${dsp}`);}return bytes;}

55.分量亦或合成(itemA 分量A,itemB 分量B,bDsp 是否扩展 true,则传入的itemA与itemB与返回的合成变量都为扩展码,否则都为Uint8Array类型的压缩码数组)

function xor(itemA, itemB, bDsp) {let compA, compB;if(!itemA || !itemB) {console.error(`传入的item为空`);return null;}if(bDsp) {compA = this.dsp2Hex(itemA);compB = this.dsp2Hex(itemB);} else {compA = itemA;compB = itemB;}if(compA.length != compB.length) {console.error(`compA:[${compA.length}]与compB: [${compB.length}]长度不一致!`);return null;}let len = compA.length;let result = new Uint8Array(len);for (let idx = 0; idx < len; idx++) {result[idx] = compA[idx] ^ compB[idx]}if(bDsp) {return this.hex2Dsp(result);} else {return result;}}return apputils;
})();

好啦,本期常用的JavaScript工具类就分享到这里,如果你有更好的想法,欢迎留言!

记得关注这个文绉绉的前端程序员:孙叫兽的博客icon-default.png?t=L892https://blog.csdn.net/weixin_41937552?spm=1010.2135.3001.5343

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

axis2 json_带有Java和Axis2的JSON Web服务

axis2 json我最近遇到一位客户&#xff0c;要求我使用Java Web服务重建其旧产品。 他们希望它模块化并且易于使用。 我想到的第一件事是使用宁静的方法。 但是让我烦恼的是&#xff0c;Java宁静的方法是使用XML !&#xff0c;我更喜欢一种更简单的通信方式&#xff0c;易于理解…

如何对技术视频转换文章投稿进行二次创作

导读&#xff1a;在技术社区经常会收到一些大的平台&#xff08;华为云博客、infoq等平台的投稿任务&#xff09;&#xff0c;经过对数千篇通用技术稿件&#xff0c;积攒了一些小技巧。所以&#xff0c;在你创作之前还是要好好的看一下&#xff0c;希望对你有帮助&#xff01;看…

iOS开发-UIScrollView原理

转载:http://www.cnblogs.com/xiaofeixiang/p/5144256.html UIScrollView 在开发中是不可避免&#xff0c;关于UIScrollView都有自己一定的理解。滚动视图有两个需要理解的属性&#xff0c;frame和bounds&#xff0c;frame是定义了视 图在窗口的大小和位置&#xff0c;bounds表…

边缘计算如何实现海量IoT数据就地处理

1.什么是IoT边缘&#xff1f;Gartner数据显示&#xff0c;到2021年底将有超过50&#xff05;的大型企业部署至少一个边缘计算应用&#xff1b;到2023年底&#xff0c;50&#xff05;以上的大型企业将至少部署6个用于物联网或沉浸式体验的边缘计算应用。工业一体机的售价一般在1…

《鸿蒙理论知识02》HarmonyOS开发平台和工具

目录 1.应用和开发工具的演进 2.超 级 终 端 应 用 开 发 面 临 全 新 挑 战

用Lucene建立搜索索引

本文是我们名为“ Apache Lucene基础知识 ”的学院课程的一部分。 在本课程中&#xff0c;您将了解Lucene。 您将了解为什么这样的库很重要&#xff0c;然后了解Lucene中搜索的工作方式。 此外&#xff0c;您将学习如何将Lucene Search集成到您自己的应用程序中&#xff0c;以…

twitter api_Java应用程序上的Twitter API

twitter api是否曾想过将推文附加到Java应用程序&#xff1f; 我为此寻找了最好的API&#xff0c;很幸运&#xff0c;我找到了它&#xff01; http://twitter4j.org/ 一个简单的方法&#xff1a; 我们需要做的第一件事是在您的Twitter帐户中创建一个应用程序&#xff0c;为其授…

垂直和水平装饰

装饰器模式是在不更改其接口的情况下向对象添加功能的最佳方法之一。 我经常使用可组合装饰器&#xff0c;并且总是会问自己在功能列表必须可配置时如何正确设计它们。 我不确定我的答案是否正确&#xff0c;但是这里有一些值得深思的地方。 公寓&#xff08;1960&#xff09;…

cygwin配置git

对于windows用户来说&#xff0c;使用git bash经常会出现乱码情况&#xff0c;那么一款优质高尚的软件&#xff0c;值得推荐一下了&#xff0c;那就是cygwin 下载cygwin后&#xff0c;在安装过程中&#xff0c;安装git&#xff0c;安装vim编辑器 然后会在安装目录下看到类linux…

前端代码规范网址导航(总结)

在大公司代码规范是非常重要的一件事情,多人协作,还有代码评审。所以能写出漂亮的代码非常重要。 这就好比你自己在家,无论是穿大裤衩子,还是背心,甚至是光膀子,都没人管你。但你要出门去约会,就要把最好的一面展现给别人。这是对别人的尊重,也是给自己的背书。所以遵…

JLupin Next Server乍一看

JEE基础结构现在有了一个新的管理解决方案– JLupin Next Server。 它为应用程序实现提供了另一种方法。 它提供什么&#xff1f; 用于实现JEE应用程序的现有解决方案受到限制。 通过新的应用程序管理方式&#xff0c;JLupin Next Server打破了所有障碍。 JEE的足迹 良好实践…

读《第一次把事情做对》有感

上班的时候&#xff0c;领导在群里发了一个PDF书籍《第一次把事情做对》&#xff0c;被这个书籍名称吸引住了&#xff0c;因为作为程序员每天有开发新任务&#xff0c;解决旧任务的BUG&#xff0c;第一次就把事情做的完全正确几乎不可能呀&#xff0c;觉得很有看的必要&#xf…

做了三年前端,你才知道10分钟就能实现一个PC版魔方游戏

导读&#xff1a;最近手头有点紧&#xff0c;看到很多小朋友都在玩魔方&#xff0c;又没有money买&#xff0c;只能自己用JavaScriptcss实现一个&#xff0c;在电脑端就能开启魔方之旅。 目录 项目启动演示 项目目录 ​源码地址 项目启动演示 前端使用JavaScript和纯CSS实现…

15K的前端应届毕业生,就因为掌握了这些知识点!(前端企业级开发必备)

目录 1.前端开发 下载安装VScode 优化配置 2、插件安装 3、设置字体大小 4、开启完整的Emmet语法支持 5、视图 2.Node.js 入门 2.1、什么是Node.js 2.2、Node.js有什么用 2.3、安装 下载&#xff1a; 2.4、快速入门 2.5、服务器端应用开发 3、ES6入门 3.2、let声…

[Training Video - 1] [Selenium Basics] [Download and Install Selenium]

Download Selenium Jars Configure jars in eclipse Webdriver http://docs.seleniumhq.org/download/ Selenium RC http://code.google.com/p/selenium/downloads/detail?nameselenium-remote-control-1.0.3.zip&can2&q转载于:https://www.cnblogs.com/MasterMonkInT…

【0元试用微软 Azure人工智能认知服务】这个人脸识别功能太强大啦

导读&#xff1a;这个由美丽的客服小姐姐提前申请好了企业试用的账号&#xff0c;个人的话还得需要visa卡。 官网地址&#xff1a;azure.cn 登录地址&#xff1a;portal.azure.cn 目录 1.简介 2.Azure 认知服务是什么&#xff1f; ​ 3.认知服务的四种职能 4.人脸API 5.新建一…

OpenMap教程3 –使用MapHandler构建基本的地图应用程序–第2部分

1.简介 在上一教程中&#xff0c;我们看到了MapHandler如何将各种组件连接在一起&#xff08;更具体地说&#xff0c;是从MapHandlerChild派生的类&#xff09;。 我们看到了如何以编程方式执行此操作&#xff0c;但是还有另一种声明性地使用openmap.properties 。 样本OpenMa…

《javaScript100例|01》超级经典一套鼠标控制左右滚动图片带自动翻滚

目录 HTML示例 图片示例 HTML示例 <html > <head> <meta http-equiv"Content-Type" content"text/html; charsetgb2312" /> <title>超级经典一套鼠标控制左右滚动图片带自动翻滚</title> <style type"text/css&quo…

[BZOJ1007] [HNOI2008] 水平可见直线 (凸包)

Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线:L1:yx; L2:y-x; L3:y0 则L1和L2是可见的,L3是被覆盖的. 给出n条直线,表示成yAxB的形式(|A|,|B|<500000),且n条直线两…

《javaScript100例|02》超级经典一套鼠标控制左右滚动图片带自动翻滚

目录 效果图 JS示例 源码地址&#xff1a; 效果图 JS示例 <title>JavaScript切换图片</title> <script> function showDaTu(src){ document.getElementById("defaultImg").srcsrc; } </script> <img src"wall1.jpg" id"…