- 输入一个值返回其数据类型
/**
* 输入一个值,返回其数据类型
* @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));