1,获取浏览器地址栏参数
function GetUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
2,地址栏上使用unicode加密解密,这样做主要是为了防止参数丢失
// 加密方法
function compileStr(code) {
var c = String.fromCharCode(code.charCodeAt(0) + code.length);
for (var i = 1; i < code.length; i++) {
c += String.fromCharCode(code.charCodeAt(i) + code.charCodeAt(i - 1));
}
return escape(c);
}
// 解密方法
function uncompileStr(code) {
code = unescape(code);
var c = String.fromCharCode(code.charCodeAt(0) - code.length);
for (var i = 1; i < code.length; i++) {
c += String.fromCharCode(code.charCodeAt(i) - c.charCodeAt(i - 1));
}
return c;
}
3,对象克隆。解决对象是引用类型的问题。
function clone(obj){
let temp = null;
if(obj instanceof Array){
temp = obj.concat();
}else if(obj instanceof Function){
//函数是共享的是无所谓的,js也没有什么办法可以在定义后再修改函数内容
temp = obj;
}else{
temp = new Object();
for(let item in obj){
let val = obj[item];
temp[item] = typeof val == 'object'?clone(val):val; //这里也没有判断是否为函数,因为对于函数,我们将它和一般值一样处理
}
}
return temp;
}
var newObj = Object.assign({}, obj); // es6的新方法
var newObj = JSON.parse(JSON.stringify(obj)); // 这种方法也能切断对象引用,但是有个缺点:不能克隆函数进来。
4,day.js 处理日期 并根据法定节假日往后推演。
// 计算日期的方法
captureDay(enter) {
var holidayList = ['2019-09-13', '2019-09-14', '2019-09-14', '2019-10-01','2019-10-02','2019-10-03','2019-10-04'],
planTime, // 计划上线时间
dayNum, // 归档时间距离上线时间的天数
weekNum = this.$dayjs(enter).format('d')*1 || 7; // 这一天是周几 周日为0
if (weekNum < 4) {
dayNum = 7 - weekNum + 2;
} else {
dayNum = 7 - weekNum + 4;
}
planTime = this.$dayjs(enter).add(dayNum, 'day').format('YYYY-MM-DD'); // 计算出了初次上线时间
var expDayA = this.holidayFile(planTime), // 上线时间往后推演几次,最多往后推演4次
expDayB = this.holidayFile(expDayA),
expDayC = this.holidayFile(expDayB),
expDayD = this.holidayFile(expDayC),
expDayE = this.holidayFile(expDayD),
expDayArr = [planTime, expDayA, expDayB, expDayC, expDayD, expDayE];
for (var val of expDayArr) {
if(holidayList.indexOf(val) == -1) {
planTime = val;
break;
}
}
return planTime;
},
// 上线时间往后推算
holidayFile(ent) {
var weekNum = this.$dayjs(ent).format('d')*1;
if (weekNum == 2) {
return this.$dayjs(ent).add(2, 'day').format('YYYY-MM-DD');
} else {
return this.$dayjs(ent).add(5, 'day').format('YYYY-MM-DD');
}
},
5,将对象属性转化成字典序(常用于加密)
// 将对象属性转为字典序
let ObjKeySort = function (obj) {
let newkey = Object.keys(obj).sort(); //先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
let newObj = {};//创建一个新的对象,用于存放排好序的键值对
for (let i = 0; i < newkey.length; i++) {//遍历newkey数组
newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对
}
return newObj;//返回排好序的新对象
}
6,将对象拼接成&连接的字符串
// 拼接属性参数
let ConnectStr = function (obj, token) {
let str = '';
for(let prop in obj){
str += prop + '=' + obj[prop] + '&';
}
if (token) {
str += 'access_token='+token;
} else {
str = str.substr(0, str.length-1);
}
return str;
}
7,将时间转化成yyyy-mm-dd hh-mm-ss.不传时间戳取当前时间
let FormatDateTime = function(inputTime) {
if (inputTime) {
var date = new Date(inputTime);
} else {
var date = new Date();
}
var y = date.getFullYear();
var m = date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = date.getHours();
h = h < 10 ? ('0' + h) : h;
var minute = date.getMinutes();
var second = date.getSeconds();
minute = minute < 10 ? ('0' + minute) : minute;
second = second < 10 ? ('0' + second) : second;
return y + '-' + m + '-' + d+' '+h+':'+minute+':'+second;
};
8,js运算
/*A乘B*/
//调用:accMul(arg1,arg2) 返回值:arg1乘以arg2的精确结果
function accMul(arg1,arg2){
var 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)
}
/*A除B*/
function accDiv(arg1, arg2) {
var t1 = 0, t2 = 0, r1, r2;
try {
t1 = arg1.toString().split(".")[1].length;
}
catch (e) {
}
try {
t2 = arg2.toString().split(".")[1].length;
}
catch (e) {
}
with (Math) {
r1 = Number(arg1.toString().replace(".", ""));
r2 = Number(arg2.toString().replace(".", ""));
return (r1 / r2) * pow(10, t2 - t1);
}
}
// 精度计算加法
function dcmAdd(arg1,arg2){
var 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 (accMul(arg1,m)+accMul(arg2,m))/m;
}
// 精度计算减法
function dcmMinus(arg1,arg2){
var 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 (accMul(arg1,m)-accMul(arg2,m))/m;
}
9,防抖函数
// 通过定时器实现
function debounce(fn,delay){
let timer = null;
return function() {
if(timer){ // 如果创建过定时器就清空并重新创建
clearTimeout(timer)
}
timer = setTimeout(fn,delay) // 简化写法
}
}