常用的 JavaScript 方法封装

  1. 输入一个值返回其数据类型
    /**
     * 输入一个值,返回其数据类型
     * @param {any} value
     * @return {string}		参数数据类型
     */
    function type(value) {
    	return Object.prototype.toString.call(value);
    }
    
  2. 数组去重
    /**
     * 数组去重
     * @param {Array} arr  	原数组
     * @return {Array} 		去重后的数组
     */
    function unique(arr) {
    	return [...new Set(arr)];
    }
    
    /**
     * 数组去重
     * @param {Array} arr  	原数组
     * @return {Array} 		去重后的数组
     */
    function unique(arr) {
    	var obj = {};
    	return arr.filter(element => {
    		if (!obj[element]) {
    			obj[element] = true;
    			return true;
    		}
    	});
    }
    
    /**
     * 数组去重
     * @param {Array} arr  	原数组
     * @return {Array} 		去重后的数组
     */
    function unique(arr) {
    	var result = [];
    	arr.forEach(element => {
    		if (result.indexOf(element) == -1) {
    			result.push(element)
    		}
    	});
    	return result;
    }
    
  3. 字符串去重
    String.prototype.unique = function () {
    	var obj = {},
    		str = '',
    		len = this.length;
    	for (var i = 0; i < len; i++) {
    		if (!obj[this[i]]) {
    			str += this[i];
    			obj[this[i]] = true;
    		}
    	}
    	return str;
    }
    
    // 用法:"aabbcc".unique();
    
    /**
     * 字符串去重
     * @param {string} arr  	原字符串
     * @return {string} 		去重后的字符串
     */
    function unique(str) {
    	return str.replace(/(\w)\1+/g, '$1')
    }
    
  4. 获取当前时间(年月日时分秒)
    /**
     * 获取当前时间(年月日时分秒)
     * @return {string} 当前时间(年月日时分秒)
     */
    function getDateTime() {
    	var date = new Date(),
    		year = date.getFullYear(),
    		month = date.getMonth() + 1,
    		day = date.getDate(),
    		hour = date.getHours(),
    		minute = date.getMinutes(),
    		second = date.getSeconds();
    	month = checkTime(month);
    	day = checkTime(day);
    	hour = checkTime(hour);
    	minute = checkTime(minute);
    	second = checkTime(second);
    
    	function checkTime(time) {
    		if (time < 10) {
    			time = `0${time}`;
    		}
    		return time;
    	}
    	return `${year}年${month}月${day}日${hour}时${minute}分${second}秒`;
    }
    
  5. 获取 url 中的参数
    /**
     * 获取 url 中的参数
     * @return {Object} url 中的参数
     */
    function getWindonHref() {
    	var sHref = window.location.href;
    	var args = sHref.split('?');
    	if (args[0] === sHref) {
    		return '';
    	}
    	var hrefarr = args[1].split('#')[0].split('&');
    	var obj = {};
    	for (var i = 0; i < hrefarr.length; i++) {
    		hrefarr[i] = hrefarr[i].split('=');
    		obj[hrefarr[i][0]] = hrefarr[i][1];
    	}
    	return obj;
    }
    
  6. 原生 js 封装 ajax
    	/**
     * @param {"get" | "post"} method	要使用的 HTTP 方法(get 或 post)
     * @param {string} url				向其发送请求的url
     * @param {Function(response)}
     * 		callback					请求成功后的回调函数
     * @param {Object} data				需要传递的数据
     * @param {Object} flag(可选)		是否异步执行操作
     */
    function ajax(method, url, callback, data, flag) {
    	var xhr;
    	flag = flag || true;
    	method = method.toUpperCase();
    	if (window.XMLHttpRequest) {
    		xhr = new XMLHttpRequest();
    	} else {
    		xhr = new ActiveXObject('Microsoft.XMLHttp');
    	}
    	xhr.onreadystatechange = function () {
    		if (xhr.readyState == 4 && xhr.status == 200) {
    			callback(xhr.responseText);
    		}
    	}
    
    	if (method == 'GET') {
    		var date = new Date(),
    		timer = date.getTime();
    		xhr.open('GET', url + '?' + data + '&timer' + timer, flag);
    		xhr.send()
    		} else if (method == 'POST') {
    		xhr.open('POST', url, flag);
    		xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    		xhr.send(data);
    	}
    }
    
  7. cookie 管理
    var cookie = {
    	/**
    	 * @param {string} name		属性名
    	 * @param {Object} value	属性值
    	 * @param {number} time		有效时间(毫秒)
    	 * @return {cookie}
    	 */
    	set: function (name, value, time) {
    		document.cookie = name + '=' + JSON.stringify(value) + '; max-age=' + time;
    		return this;
    	},
    	/**
    	 * @param {string} name		属性名
    	 * @return {cookie}
    	 */
    	remove: function (name) {
    		return this.set(name, '', -1);
    	},
    	/**
    	 * @param {string} name		属性名
    	 * @return {Object} value	属性值
    	 */
    	get: function (name) {
    		var allCookieArr = document.cookie.split('; ');
    		for (var i = 0; i < allCookieArr.length; i++) {
    			var itemCookieArr = allCookieArr[i].split('=');
    			if (itemCookieArr[0] === name) {
    				return JSON.parse(itemCookieArr[1])
    			}
    		}
    		return undefined;
    	}
    }
    
  8. 验证邮箱的正则表达式
    /**
     * @param {string} email	邮箱地址
     * @return {boolean}	是否通过验证
     */
    function isAvailableEmail(email) {
    	var reg = /^([\w+\.])+@\w+([.]\w+)+$/
    	return reg.test(email)
    }
    
  9. 格式化时间
    /**
     * @param {Date} date		时间实例
     * @param {Object} format	格式
     * @return {string} 		格式化后的字符串
     */
    function formatDate(date, format) {
    	var obj = {
    		yyyy: date.getFullYear(),
    		yy: ("" + date.getFullYear()).slice(-2),
    		M: date.getMonth() + 1,
    		MM: ("0" + (date.getMonth() + 1)).slice(-2),
    		d: date.getDate(),
    		dd: ("0" + date.getDate()).slice(-2),
    		H: date.getHours(),
    		HH: ("0" + date.getHours()).slice(-2),
    		h: date.getHours() % 12,
    		hh: ("0" + date.getHours() % 12).slice(-2),
    		m: date.getMinutes(),
    		mm: ("0" + date.getMinutes()).slice(-2),
    		s: date.getSeconds(),
    		ss: ("0" + date.getSeconds()).slice(-2),
    		w: ['日', '一', '二', '三', '四', '五', '六'][date.getDay()]
    	};
    	return format.replace(/([a-z]+)/ig, function($1) {
    		return obj[$1]
    	});
    }
    
    // 用法(举例):formatDate(new Date(), "yyyy年MM月dd日 HH时mm分ss秒 星期w")
    
  10. 获取 url 上的参数
    /**
     * @param {string} url				需要解析的地址
     * @param {string} keyName(可选)		参数中一个确定的属性
     * @return {Object | string}		地址中的参数组成的对象或者对象中某一个确定的值
     */
    function getUrlParam(url, keyName) {
    	var result = {};
    	url.replace(/(\w+)=(\w+)(?=[&|#])/g, function(ele, key, value) {
    		if (!result[key]) {
    			result[key] = value;
    		} else {
    			var temp = result[key];
    			result[key] = [].concat(temp, value);
    		}
    	})
    	if (!keyName) {
    		return result;
    	} else {
    		return result[keyName] || '';
    	}
    }
    
  11. 防抖
    /**
     * @param {Function} handle		事件处理函数
     * @param {number} delay		时间范围内防抖(毫秒)
     */
    function debounce(handle, delay) {
    	var timer = null;
    	return function() {
    		var _self = this,
    			_args = arguments;
    		clearTimeout(timer);
    		timer = setTimeout(function() {
    			handle.apply(_self, _args)
    		}, delay)
    	}
    }
    
  12. 节流
    /**
     * @param {Function} handle		事件处理函数
     * @param {number} wait			等待时间(毫秒)
     */
    function throttle(handler, wait) {
    	var lastTime = 0;
    	return function (e) {
    		var nowTime = new Date().getTime();
    		if (nowTime - lastTime > wait) {
    			handler.apply(this, arguments);
    			lastTime = nowTime;
    		}
    	}
    }
    // 用法举例:document.querySelector("body").addEventListener("mousemove", throttle(handleMousemove, 1000));
    

学习地址:https://mp.weixin.qq.com/s/i7FBCYaVenvrNycfTdtLuQ

posted @ 2022-05-31 16:04  太轻描淡写了  阅读(94)  评论(0编辑  收藏  举报