在我们的日常开发中,会将一些公用的方法抽离出来,放到统一的utils文件中,然后暴露给外部去使用,这就使得我们的项目更加的完善,也更加的有层次感。接下来,我将一些目前在我的项目中常用的方法贴出来,可供以后使用。
常用方法
1.判断方法
// 内部函数, 用于判断对象类型
function _getType(object) {
return Object.prototype.toString.call(object).match(/^[object\s(.*)]$/)[1];
}
// 判断是否为数组
export function isArray(obj) {
return _getType(obj).toLowerCase() === 'array';
}
// 判断是否为字符串
export function isString(obj) {
return _getType(obj).toLowerCase() === 'string';
}
// 判断是否为日期
export function isDate(obj) {
return _getType(obj).toLowerCase() === 'date';
}
// 判断是否为对象
export function isObject(obj) {
return _getType(obj).toLowerCase() === 'object';
}
// 判断是否为数值
export function isNumber(obj) {
return _getType(obj).toLowerCase() === 'number' && !isNaN(obj);
}
// 判断参数是否为空, 包括null, undefined, [], '', {}
// param {object} obj 需判断的对象
export function isEmpty(obj) {
let empty = false;
if (obj === null || obj === undefined) { // null and undefined
empty = true;
} else if ((isArray(obj) || isString(obj)) && obj.length === 0) {
empty = true;
} else if (isObject(obj)) {
let hasProp = false;
for (let prop in obj) {
if (prop) {
hasProp = true;
break;
}
}
if (!hasProp) {
empty = true;
}
}
return empty;
}
// 判断参数是否不为空
export function isNotEmpty(obj) {
return !isEmpty(obj);
}
// 判断参数是否为空字符串, 比isEmpty()多判断字符串中有空格的情况, 如: ' '.
// param {string} str 需判断的字符串
export function isBlank(str) {
if (isEmpty(str)) {
return true;
} else if (isString(str) && str.trim().length === 0) {
return true;
}
return false;
}
// 判断参数是否不为空字符串
export function isNotBlank(obj) {
return !isBlank(obj);
}
// 判断参数是否为FormData对象
export function isFormData(obj) {
return obj instanceof FormData;
}
2.获取地址栏参数对象以及值
// 获取 url 参数,因为 this.props.location.query 不能得到带有 # 的参数,所以添加此方法
export function getQueryParams() {
let obj = {}, name, value;
let str = location.href;
let num = str.indexOf('?');
str = str.substr(num + 1);
const arr = str.split('&');
for (let i = 0; i < arr.length; i++) {
num = arr[i].indexOf('=');
if (num > 0) {
name = arr[i].substring(0, num);
value = arr[i].substr(num + 1);
obj[name] = value;
}
}
return obj;
}
// 通过URL搜索对象获取url参数, 如www.xxx.com?a=1&b=2, getURLParam('a') return 1
export function getURLParam(name) {
if (isBlank(name)) {
return;
}
let urlQuery = getQueryParams();
return urlQuery[name];
}
3.生成指定范围内随机整数
export function random(min, max) {
min = min || -90;
max = max || 90;
return min + Math.floor(Math.random() * (max - min));
}
4.深拷贝
// 第一种方式
export function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
// 第二种方式
export function deepClone(source) {
if (!source && typeof source !== 'object') {
throw new Error('error arguments', 'shallowClone');
}
const targetObj = source.constructor === Array ? [] : {};
for (const keys in source) {
if (source.hasOwnProperty(keys)) {
if (source[keys] && typeof source[keys] === 'object') {
targetObj[keys] = source[keys].constructor === Array ? [] : {};
targetObj[keys] = deepClone(source[keys]);
} else {
targetObj[keys] = source[keys];
}
}
}
return targetObj;
}
5.缓存类方法
项目中,我们有需要操作缓存的情况,类似sessionStorage或localStorage等。
5.1. sessionStorage方法
// param name 存储名称
// param value 存储值
export function setSession(name, value) {
if (typeof sessionStorage === 'object') {
var data = value;
if (typeof value !== 'string') {
if (data === undefined) {
data = null;
} else {
data = JSON.stringify(data);
}
}
sessionStorage.setItem(name, data);
}
}
// 获取session
// param name 存储名称
export function getSession(name) {
if (typeof sessionStorage === 'object') {
var data = sessionStorage.getItem(name);
try {
return JSON.parse(data);
} catch (e) {
return data;
}
}
return null;
}
5.2. localStorage方法
// 设置Local
// param name 存储名称
// param value 存储值
export function setLocal(name, value) {
if (typeof localStorage === 'object') {
var data = value;
if (typeof value !== 'string') {
if (data === undefined) {
data = null;
} else {
data = JSON.stringify(data);
}
}
localStorage.setItem(name, data);
}
}
// 获取Local
// param name 存储名称
export function getLocal(name) {
if (typeof localStorage === 'object') {
var data = localStorage.getItem(name);
try {
return JSON.parse(data);
} catch (e) {
return data;
}
}
return null;
}
5.3. sessionStorage和localStorage共有方法
// param name 存储名称
export function remove(name) {
if (typeof sessionStorage === 'object') {
if (sessionStorage.getItem(name)) {
sessionStorage.removeItem(name);
}
}
if (typeof localStorage === 'object') {
if (localStorage.getItem(name)) {
localStorage.removeItem(name);
}
}
}
// 移除session或者Local全部内容
export function clear() {
if (typeof sessionStorage === 'object') {
sessionStorage.clear();
}
if (typeof localStorage === 'object') {
localStorage.clear();
}
}
总结
以上就是项目中遇到的一些公共方法,欢迎大家指正补充。