常用的 JavaScript 方法封装
- 输入一个值返回其数据类型
/** * 输入一个值,返回其数据类型 * @param {any} value * @return {string} 参数数据类型 */ function type(value) { return Object.prototype.toString.call(value); }
- 数组去重
/** * 数组去重 * @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; }
- 字符串去重
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') }
- 获取当前时间(年月日时分秒)
/** * 获取当前时间(年月日时分秒) * @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}秒`; }
- 获取 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; }
- 原生 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); } }
- 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; } }
- 验证邮箱的正则表达式
/** * @param {string} email 邮箱地址 * @return {boolean} 是否通过验证 */ function isAvailableEmail(email) { var reg = /^([\w+\.])+@\w+([.]\w+)+$/ return reg.test(email) }
- 格式化时间
/** * @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")
- 获取 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] || ''; } }
- 防抖
/** * @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) } }
- 节流
/** * @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));
分类:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构