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表…

使用Spring MVC进行资源版本控制

提供静态资源时&#xff0c;通常的做法是将某种版本信息附加到资源URL。 这使浏览器可以无限期地缓存资源。 每当资源的内容更改时&#xff0c;URL中的版本信息也会更改。 更新的URL会强制客户端浏览器放弃缓存的资源&#xff0c;并从服务器重新加载最新的资源版本。 使用Spri…

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

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

.propertie文件注释

在.properties文件中注释,前边加#就可以转载于:https://www.cnblogs.com/toSeeMyDream/p/5539322.html

《鸿蒙理论知识01》HarmonyOS概述之技术特性

导读:多种设备之间能够实现硬件互助、资源共享,依赖的关键技术包括分布式软总线、分布式设 备虚拟化、分布式数据管理、分布式任务调度等。 目录 1.分布式软总线 2.分布式设备虚拟化 3.分布式数据管理 4.分布式任务调度

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

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

不常用 保存下来

一、数学函数  数学函数主要用于处理数字&#xff0c;包括整型、浮点数等。 ABS(x) 返回x的绝对值   SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x的最小整数   SELECT CEIL(1.5) -- 返回2 FLOOR(x) 返回小于或等于x的最大整数   SELECT FLOOR(1.5) --…

用Lucene建立搜索索引

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

《鸿蒙理论知识03》HarmonyOS概述之系统安全

在搭载 HarmonyOS 的分布式终端上,可以保证“正确的人,通过正确的设备,正确地使 用数据”。 通过“分布式多端协同身份认证”来保证“正确的人”。 通过“在分布式终端上构筑可信运行环境”来保证“正确的设备”。 通过“分布式数据在跨终端流动的过程中,对数据进行分类分…

Shell基础学习(六) 流程控制

1、if if的语法格式 if conditon thencommand1command2commandn fi 2、if else if conditon thencommand1command2commandn elsecommand1command2commandn fi 3、if elseif else if conditon thencommand1command2commandn else if conditoncommand1command2commandn elsecomma…

《鸿蒙理论知识04》HarmonyOS概述之系统定义

目录 系统定位 技术架构 系统服务层 框架层 系统定位 HarmonyOS 是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体 娱乐等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS 提出了基 于同一套系统能力、适配多种终端形态的分布式理念,…

jQuery on 绑定的事件触发多次

jquery用on绑定事件&#xff0c;在代码执行过程中&#xff0c;可能会遇到多次执行的情况。 解决方案是在on的事件前面加上一个off&#xff0c;再on。 $(#btnBind).off(click).on(click,function () {alert(123); });$("#xxx").off(keydown).focus().on(keydown,funct…

twitter api_Java应用程序上的Twitter API

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

《鸿蒙理论知识05》HarmonyOS概述之下载与安装软件

DevEco Studio 支持 Windows 和 macOS 系统,下面将针对两种操作系统的软件安装方式 进行介绍。 目录 Windows 环境 macOS 环境 Windows 环境 运行环境要求 为保证 DevEco Studio 正常运行,建议您的电脑配置满足如下要求:  操作系统:Windows10 64 位  内存:8GB …

网络编程释疑之:单台服务器上的并发TCP连接数可以有多少

曾几何时我们还在寻求网络编程中C10K问题的解决方案&#xff0c;但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了。我们先假设单台服务器最多只能支持万级并发连接&#xff0c;其实对绝大多数应用来说已经远远足够了&#xff0c;但是对于一些…

垂直和水平装饰

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

cygwin配置git

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

《鸿蒙理论知识06》HarmonyOS概述之应用开发基础知识

目录 APP Ability 库文件 资源文件 配置文件 pack.info HAR APP HarmonyOS 的应用软件包以 APP Pack(Application Package)形式发布