JS实用函数收集,持续记录

2023-02-17 14:28:23 浏览数 (2)

File对象转base64

代码语言:javascript复制
function getBase64(file) {
    return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = () => resolve(reader.result);
        reader.onerror = error => reject(error);
    });
}

不同时间显示不同的欢迎语

代码语言:javascript复制
function welcomes() {
    
    let hour = (new Date).getHours();
    let wel = "";

    switch (true) {
        case hour === 1:
            wel = "凌晨1点了!该休息了!";
            break;
        case hour === 2:
            wel = "工作狂,还在忙嘛?";
            break;
        case hour === 3:
            wel = "午夜3点!你决定不睡觉了嘛??";
            break;
        case hour === 4:
            wel = "凌晨4点了,您的工作精神一定要上报党中央!";
            break;
        case hour === 5:
            wel = "5点多了,您是刚起床还是还没睡啊?";
            break;
        case hour === 6:
            wel = "早上好!新一天又开始啦!有什么打算呢?";
            break;
        case hour === 7:
            wel = "吃早饭了嘛?";
            break;
        case(hour === 8) || (hour === 9) || (hour === 10):
            wel = "祝您工作愉快!";
            break;
        case hour === 11:
            wel = "快中午啦,准备下班了嘛?";
            break;
        case hour === 12:
            wel = "中午好!你吃饭了嘛?";
            break;
        case(hour === 13) || (hour === 14):
            wel = "准备准备要上班了!";
            break;
        case(hour === 15) || (hour === 16) || (hour === 17):
            wel = "下午好!";
            break;
        case(hour === 18) || (hour === 19):
            wel = "该看新闻联播了!";
            break;
        case(hour === 20) || (hour === 21) || (hour === 22):
            wel = "休息下,找个电影看看睡觉吧?";
            break;
        case(hour === 23):
            wel = "不早了,快休息吧?";
            break;
        case(hour === 0):
            wel = "午夜时分,你可要注意身体呢!";
            break;
        default:
            wel = "生活还得继续,加油!";
            break;
    }

    return hour   '点了,'   wel;
}

限制函数调用次数

代码语言:javascript复制
function transformer(func) {
  let i = 3;
  return function (...args) {
    const context = this;
    if (i > 0) {
      i--;
      return func.apply(context, args);
    } else {
      return;
    }
  }
}

深度判断不同对象是否一致

代码语言:javascript复制
/*判断对象是否一致*/
function isObjectValueEqual(a, b) {
    /*取对象a和b的属性名*/
    var aProps = Object.getOwnPropertyNames(a);
    var bProps = Object.getOwnPropertyNames(b);
    /*判断属性名的length是否一致*/
    if (aProps.length != bProps.length) {
        return false;
    }
    /*循环取出属性名,再判断属性值是否一致*/
    for (var i = 0; i < aProps.length; i  ) {
        var propName = aProps[i];
        if (a[propName] !== b[propName]) {
            return false;
        }
    }
    return true;
}

解析秒数所对应的时分秒数量

代码语言:javascript复制
/**
 * 获取时分秒
 * @param {Number} seconds 总秒数
 * @param {String} dateFormat 返回的日期格式,默认为'H:i:s'
 */
function getSFM(seconds, dateFormat = 'H:i:s') {
    var obj = {};
    obj.H = parseInt(Math.floor(seconds / 3600));/*得到小时数*/
    obj.i = parseInt(Math.floor((seconds - obj.H * 3600) / 60));
    obj.s = parseInt(Math.floor(seconds - obj.H * 3600 - obj.i * 60));
    if (obj.H < 10) {
        obj.H = '0'   obj.H;
    }
    if (obj.i < 10) {
        obj.i = '0'   obj.i;
    }
    if (obj.s < 10) {
        obj.s = '0'   obj.s;
    }

    /*解析*/
    var rs = dateFormat.replace('H', obj.H).replace('i', obj.i).replace('s', obj.s);
    return rs;
}

JS对象转POST参数

代码语言:javascript复制
/*将对象转为url参数*/
function urlEncode(param, key, encode) {
    if (param == null) return '';
    var paramStr = '';
    var t = typeof (param);
    if (t == 'string' || t == 'number' || t == 'boolean') {
        paramStr  = '&'   key   '='   ((encode == null || encode) ? encodeURIComponent(param) : param);
    } else {
        for (var i in param) {
            var k = key == null ? i : key   (param instanceof Array ? '['   i   ']' : '.'   i);
            paramStr  = All.urlEncode(param[i], k, encode);
        }
    }
    return paramStr;
},

获取链接内GET参数的对象

代码语言:javascript复制
/*获取get参数的方法*/
function getQueryVariable() {
    let query = window.location.search.substring(1);
    let key_values = query.split("&");
    let params = {};
    key_values.map(key_val => {
        let key_val_arr = key_val.split("=");
        params[key_val_arr[0]] = key_val_arr[1];
    });
    return params;
}

深度递归null转空字符串

代码语言:javascript复制
 /*null转空字符串*/
    null2str(data) {
        if (typeof data != 'object' || data === null || data === 'null') {
            data = '';
            return data;
        } else {
            for (let x in data) {
                if (data[x] === null || data[x] === 'null') { /*如果是null 把直接内容转为 ''*/
                    data[x] = '';
                } else {
                    if (Array.isArray(data[x])) { /*是数组遍历数组 递归继续处理*/
                        data[x] = data[x].map(z => {
                            return null2str(z);
                        });
                    }
                    if (typeof (data[x]) === 'object') { /*是json 递归继续处理*/
                        data[x] = null2str(data[x])
                    }
                }
            }
            return data;
        }
    }

可编辑元素粘贴纯文本

代码语言:javascript复制
/* 绑定元素的粘贴事件 */
function (e) {
       // 阻止默认粘贴
       e.preventDefault();
       // 粘贴事件有一个clipboardData的属性,提供了对剪贴板的访问
       // clipboardData的getData(fomat) 从剪贴板获取指定格式的数据
       var text = e.clipboardData.getData('text/plain');
       // 插入
       document.execCommand("insertText", false, text);
});

Object.create(null)

代码语言:javascript复制
Object.create(null)

传入null当做参数,创建的对象不会有原型,也不会有Object 原型对象的任何属性(例如toString,hasOwnProperty等)

Object.create(null)可以创建一个干净且高度可定制的对象当做数据字典,进行循环取用,可以提高循环效率。

如果对象有原型链,那便会在循环的时候去循环它的各个属性和方法,效率则会降低

0 人点赞