JS小技巧系列

这篇博客分享了多个实用的JavaScript编程技巧,包括防止浏览器自动填充密码、生成随机整数、正则替换、时间格式化、UUID生成、解决精度丢失问题的金额计算、分数与小数互转、加减乘除的精确计算等。这些技巧对于提高代码质量和效率大有裨益。

积累一些实用的小技巧

1、表单页面防止浏览器自动填充密码

在这里插入图片描述

<!-- 用于防止浏览器自动填充密码 -->
                <input type="password" clearable hidden autocomplete="new-password" style="display: none" />

2、JS随机整数

//传入参数,获取区间范围,如:[0,4)  获取随机0-3的整数
 Random(min, max) {
    return Math.round(Math.random() * (max - min)) + min;
  },

3、正则替换指定字符串

//遍历整个字符串,把 \\ 的替换成 /
let str = '\\image\\xxx/555'
str = str..replace(/\\/g, '/');

4、JS时间格式化

//1、str为分钟数(number)转换为: xx时xx分

timeFormat = function(str) {
	return ((Math.floor(str / 60 % 24).toString().length < 2 ? '0' + Math.floor(str / 60 % 24).toString() : Math.floor(str / 60 % 24).toString()) + '时' + ((str % 60).toString().length < 2 ? '0' +(str % 60).toString() : (str % 60).toString()) + '分')
}


//2、需要格式化的格式:YYYY-mm-dd HH:MM 表示2021-06-06 19:45,参数可传入 毫秒 或者其他日期
//调用:dateFormat('YYYY-mm-dd','2021-06-12'),根据格式返回对应格式

dateFormat = function(fmt, date1){
		let date = new Date(date1)
		let ret;
		const opt = {
			"Y+": date.getFullYear().toString(), // 年
			"m+": (date.getMonth() + 1).toString(), // 月
			"d+": date.getDate().toString(), // 日
			"H+": date.getHours().toString(), // 时
			"M+": date.getMinutes().toString(), // 分
			"S+": date.getSeconds().toString(), // 秒

		};
		for (let k in opt) {
			ret = new RegExp("(" + k + ")").exec(fmt);
			if (ret) {
				fmt = fmt.replace(
					ret[1],
					ret[1].length == 1
						? opt[k]
						: opt[k].padStart(ret[1].length, "0")
				);
			}
		}
		return fmt;
}


//3、格式化日期转换秒 00:00:00 → 10s
	  ToSeconds(time){
				  var str = time;
				  var arr = str.split(':');
				  var hs = parseInt(arr[0]*3600);
				  var ms = parseInt(arr[1]*60);
				  var ss = parseInt(arr[2]);
				  var seconds = hs + ms + ss;
				  return seconds;
		  }


5、uuid

 uuid: function () {
    var s = [];
    var hexDigits = "0123456789abcdef";
    for (var i = 0; i < 36; i++) {
      s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
    s[8] = s[13] = s[18] = s[23] = "-";

    var uuid = s.join("");
    return uuid;
  }

  uuid16: function () {
    var s = [];
    var hexDigits = "0123456789abcdef";
    for (var i = 0; i < 16; i++) {
      s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    // s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
    // s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
    var uuid = s.join("");
    return uuid;
  }

6、JS计算精度丢失问题(金额计算)

/**
 * 折扣商品的价格计算,discount:数量 ,currentPrice:价格
 * 3*5,3是被乘数,5是乘以数
 */
function calculate(discount, currentPrice) {
  let res = +(Math.round((discount * currentPrice + 0.000001) * 100) / 100).toFixed(2);
  return res ? res : 0.01;
}

7、分数转小数

export const toPoint = (percentg) => {
    let str = percent.replace("%", "");
    str = str / 100;
    return str;
}

8、小数转分数

export const toPercent = (point) => {
    // let str = Number(point * 100).toFixed(1);
    let str= Number(point * 100);
    str += "%";
    return str;
}

9、加法函数

/**
 * 加法函数
 * @param arg1 加数
 * @param arg2 被加数
 * @returns arg1 + arg2的精确结果
 */
export const accAdd = (arg1, arg2) => {
    let 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;
}

10、减法函数

/**
 * 减法函数
 * @param arg1 减少数
 * @param arg2 被减数
 * @returns arg2 - arr1 的精确结果
 */
export const accSub = (arg1, arg2) => {
    let 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));
    //last modify by deeka
    //动态控制精度长度
    n = (r1 >= r2) ? r1 : r2;
    return ((arg2 * m - arg1 * m) / m).toFixed(n);
}

11、乘法

/**
 * 
 * @param arg1 被乘数
 * @param arg2 乘于数
 * @returns arg1 * arg2的精确结果
 */
export const accMul = (arg1, arg2) => {
    let 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);
}

12、除法

/**
 * 除法函数,用来得到精确的除法结果
 * - 说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
 * @param arg1 被除数
 * @param arg2 除于数
 * @returns arg1 / arg2的精确结果
 */
export const accDiv = (arg1, arg2) => {
    let 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(".", ""));
    if (r2 == 0) {
        return Infinity;
    } else {
        return ((r1 / r2) * Math.pow(10, t2 - t1)).toFixed(2);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值