JavaScript 中常用和必备的一些工具类函数

73 阅读3分钟

目录

1、判断是否为数值函数 isNumber

2、计算字符串长度 calculateStrLengh

3、转换日期格式 changeDateFormat

4、节流函数 throttle

5、防抖函数 debounce

6、获取地址栏参数 GetUrlParam

7、判断两个 Oject 是否相等 isEqualObject 

8、判断 Object 是否为空 isEmptyObject

9、判断字符串是否存在 isExist

10、获取小程序链接的地址栏参数 GetWxMiniProgramUrlParam


1、判断是否为数值函数 isNumber

function isNumber(val){
	if(val==""){
		return false;
	}
	if(val.length>1){
		if(val.substr(val.length-1, val.length)=="."){
			var len = val.split(".").length-1;
			if(len>1){
				return false;
			}
			val = val.substr(0, val.length-1);
		}
	}
	
	var regPos = /^\d+(\.\d+)?$/; 
	var regNeg = /^((([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; 
	if(regPos.test(val) || regNeg.test(val)) {
		return true;
	}
	return false;
}

2、计算字符串长度 calculateStrLengh

//计算字符长度(一个汉字2个字符)
function calculateStrLengh(str){
	var len=0;
	if(!isExist(str)){
		return 0;
	}
	for (var i=0; i<str.length; i++) {
		var c = str.charCodeAt(i);
		//单字节加1
		if ((c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f)) {
			len++;
		}
		else {
			len+=2;
		}
	}
	return len;
}

3、转换日期格式 changeDateFormat

//转换日期格式(时间戳转换为datetime格式)
function changeDateFormat(cellval, hms) {
	var dateVal = cellval + "";
	if (cellval != null) {
		var date = new Date(parseInt(dateVal.replace("/Date(", "").replace(")/", ""), 10));
		var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
		var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();

		var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
		var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
		var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
		if(hms){
			return date.getFullYear() + "-" + month + "-" + currentDate + " " + hours + ":" + minutes + ":" + seconds;
		}else{
			return date.getFullYear() + "-" + month + "-" + currentDate;
		}
	}
}

4、节流函数 throttle

/**  
 * 节流  
 */  
function throttle(fn, wait = 500, isImmediate = false) {  
  let flag = true;  
  if (isImmediate) {  
    return function() {  
      if (flag) {  
        fn.apply(this, arguments);  
        flag = false;  
        setTimeout(() => {  
          flag = true  
        }, wait)  
      }  
    }  
  }  
  return function() {  
    if (flag == true) {  
      flag = false  
      setTimeout(() => {  
        fn.apply(this, arguments)  
        flag = true  
      }, wait)  
    }  
  }  
}  

5、防抖函数 debounce

//防抖  
function debounce(fn, wait, isImmediate) {  
  let timerId = null;  
  let flag = true;  
  if (isImmediate) {  
    return function() {  
      clearTimeout(timerId);  
      if (flag) {  
        this[fn]() ;  
        flag = false  
      }  
      timerId = setTimeout(() => {  
        flag = true  
      }, wait)  
    }  
  }  
  return function() {  
    clearTimeout(timerId);  
    timerId = setTimeout(() => {  
      this[fn]()  
    }, wait)  
  }  
}

6、获取地址栏参数 GetUrlParam

//js获取地址栏参数  name为参数名
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;
}

7、判断两个 Oject 是否相等 isEqualObject

// 判断两个object是否相等
function isEqualObject (obj1, obj2) {
  var o1 = obj1 instanceof Object;
  var o2 = obj2 instanceof Object;
  if (!o1 || !o2) { /*  判断不是对象  */
    return obj1 === obj2;
  }

  if (Object.keys(obj1).length !== Object.keys(obj2).length) {
    return false;
    //Object.keys() 返回一个由对象的自身可枚举属性(key值)组成的数组,例如:数组返回下表:let arr = ["a", "b", "c"];console.log(Object.keys(arr))->0,1,2;
  }

  for (var attr in obj1) {
    var t1 = obj1[attr] instanceof Object;
    var t2 = obj2[attr] instanceof Object;
    if (t1 && t2) {
      return diff(obj1[attr], obj2[attr]);
    } else if (obj1[attr] !== obj2[attr]) {
      return false;
    }
  }
  return true;
}

8、判断 Object 是否为空 isEmptyObject

//判断object为空
function isEmptyObject (e) {
  for (var t in e)
    return !1;
  return !0
}

9、判断字符串是否存在 isExist

function isExist (str) {
  if (str !== null && str !== "undefined" && str !== "" && typeof str != "undefined" && !(typeof (str) == "string" &&
      str
      .split(" ").join("").length == 0)) {
    return true;
  } else {
    return false;
  }
}

10、获取小程序链接的地址栏参数 GetWxMiniProgramUrlParam

// 判断是否为IE8
var DEFAULT_VERSION = 8.0;
var ua = navigator.userAgent.toLowerCase();
var isIE = ua.indexOf("msie") > -1;
var safariVersion;
if (isIE) {
	safariVersion = ua.match(/msie ([\d.]+)/)[1];
}