前言


本文次要写的是本人罕用的一些javaScript 代码块。记录罕用代码,不便查阅。如发现错误,欢送留言改过。

浏览三连:点赞(????)、关注(????)、珍藏(????)。

注释


1. 将Url参数转换成对象,没有参数时返回空对象


function formateParamsToObject() {    let search = window.location.search, // 获取url的参数局部        obj = {};    if (!search) return obj;    let params = search.split('?')[1]; // 获取参数    let paramsArr = params.split('&');    // 遍历数组    for (let i of paramsArr) {        let arr = i.split('=');        obj[arr[0]] = arr[1] // 设置对象key,value    }    return obj}

举个栗子 → ????????:www.baidu.com?id=1&type=2

formateParamsToObject() // {id: "1", type: "2"}

2. 将对象转换成Url须要的参数 tag标记是否带问号(?)


function formateObjToParamStr(obj, tag = true) {    let data = [],        dStr = '';    for (let key in obj) {        data.push(`${key}=${obj[key]}`);    }    dStr = tag ? '?' + data.join('&') : data.join('&');    return dStr}

举个栗子 → ????????:

formateObjToParamStr({id:1,type:2}) // "?id=1&type=2"formateObjToParamStr({id:1,type:2},false) // "id=1&type=2"

3. 通过参数名获取url中的参数值


function getUrlParam(name,url) {    let search = url || window.location.search,        reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'),        r = search.substr(search.indexOf('\?') + 1).match(reg);    return r != null ? r[2] : '';}

举个栗子 → ????????:www.baidu.com?id=1&type=2

getUrlParam('id','www.baidu.com?id=1&type=2') // 1

4. 设置cookie,设置max-age 属性指定cookie 的有效期(秒)


function setCookie(name, value, expiretime) {    let cookie = `${name}=${encodeURIComponent(value)}; path=/`;    if (typeof expiretime === 'number')cookie += `; max-age=${(60*60*24*expiretime)}`;    document.cookie = cookie;}

举个栗子 → ????????:

setCookie('id',1,1)document.cookie //"id=1"

5. 读取cookie,将设置的cookie值拿到单个key 对应的值


function getCookie(name) {    let cookie = document.cookie;    let arrCookie = cookie.split('; ');    for (let i = 0; i < arrCookie.length; i++) {        let arr = arrCookie[i].split('=');        if (arr[0] == name) return arr[1];    }}

举个栗子 → ????????

getCookie('id') // 1

6. 删除对应设置的cookie

max-age为0时,删除cookie


function deleteCookie(name) {    let currentCookie = getCookie(name);    if (currentCookie) document.cookie = name + '=' + currentCookie + `; max-age=0}; path=/`;}

举个栗子 → ????????

deleteCookie('id')document.cookie // ''

7. 防抖函数的利用


在肯定的工夫内,屡次执行同一个函数,只会触发一次

function debounce(fn,delay) {    let timer = null;    return function () {        if(timer) clearTimeout(timer);        timer = setTimeout(fn,delay)    }}

8. 节流函数的利用


在肯定工夫内,屡次执行同一个函数,只有第一次执行才会触发。

function throttle(fn,delay) {    let flag = true;    return function () {        if(!flag) return false;        flag = false;        setTimeout(()=> {           fn();           flag = false;        },delay);    }}

举个栗子 → ????????
场景:以一个输入框为例,监听鼠标弹起事件,在1s工夫内, 输入工夫戳,屡次输出,只会执行一次。

let ele = document.getElementsByTagName('input')[0];ele.addEventListener('keyup',throttle(()=>{    console.log(Date.now());},1000));

9. 正则匹配手机号码


function checkPhone(phone) {   return /^1[3|4|5|6|7|8|9]d{9}$/.test(phone);}

举个栗子 → ????????

checkPhone(18900008888) // true 此号码随机写的,如能够拨打,告知批改

10. 正则匹配固定电话号码


function checkTel (tel) {   return /^((d{3,4})|d{3,4}-|s)?d{5,14}$/.test(tel)}

举个栗子 → ????????

checkTel('12306')    // true 12306服务热线checkTel('95105105') // true 12306 订票热线checkTel('0755-12306') //true

11. 是否是数组


function isArray (val) {   return Object.prototype.toString.call(val) === '[object Array]';}

举个栗子 → ????????

isArray([]) // trueisArray({}) // false

12. 是否是对象


function isObject(val) {   return Object.prototype.toString.call(val) === '[object Object]';}

举个栗子 → ????????

isObject([]) // falseisObject({}) // true

13. 是否是数值


function isNumber(val) {   return Object.prototype.toString.call(val) === '[object Number]';}

举个栗子 → ????????

isNumber(12) // trueisNumber({}) // false

14. 检测对象是否含有某个属性


function checkObjHasAtrr(obj, key) {   return Object.prototype.hasOwnProperty.call(obj, key);}

举个栗子 → ????????

checkObjHasAtrr({id: 1, type: 2}, 'id') // true

15.数组最大值


function max (arr) {   if (!isArray(arr) && arr.length) return;   return Math.max.apply(null,arr);}

举个栗子 → ????????

max([1,2,3,4,5,6])  // 6

16. 求数组最小值


function min(arr) {   if (!isArray(arr) && arr.length) return;   return Math.min.apply(null, arr);}

举个栗子 → ????????

min([1,2,3,4,5,6])  // 1

17. 生成一个新数组,该数组从start 开始,默认值为0


function toArray (list, start) {    start = start || 0;    let i = list.length - start;    let ret = new Array(i);    while (i--) {      ret[i] = list[i + start];    }    return ret;}

举个栗子 → ????????

toArray([1,2,3,4,5,6], 2) // [3, 4, 5, 6]

18. 生成随机范畴的随机数[min,max]


阐明:
Math.floor:下取整
Math.random:生成0~1 的随机数

function getRandom(min,max) {   return Math.floor(Math.random() * (max - min + 1)) + min;}

举个栗子 → ????????

getRandom(1,2) // 1 随机生成[1,2]

19. 去除字符串空格


去除首尾空格

function trim1(str) {    return str.replace(/(^\s*)|(\s*$)/g, '');}

去除字符串所有空格

function trim2(str) {    return str.replace(/(\s+)/g, ''); }

举个栗子 → ????????

trim1(' web api ') // 'web api'trim2(' web api ') // 'webapi'

20. 阻止默认事件操作


preventDefault用于勾销一个指标元素的默认行为。默认事件,比方a标签,点击默认跳转。

function preventDefault(e) {    e = e || window.event;    if (e & e.preventDefault) e.preventDefault();    else e.returnValue  = false; //IE低版本}

举个栗子 → ????????
鼠标点击右键,阻止默认事件(oncontextmenu)弹起

document.oncontextmenu  = function (e) {    preventDefault(e);}

21. 阻止冒泡事件操作


事件冒泡:如在一个按钮是绑定一个”click”事件,那么”click”事件会顺次在它的父级元素中被触发 。

function stopPropagation(e) {    e = e || window.event;    if (e & e.stopPropagation) e.stopPropagation();    else e.cancelBubble = true;}

举个栗子 → ????????
已input,body为栗:

let btn = document.querySelector('input');let oBody = document.querySelector('body');btn.onclick = function (e) {    stopPropagation(e); // 1    // stopPropagation(e); // 1,2    console.log(1)}oBody.onclick = function () {    console.log(2);}

22. 将对象数据转换须要的数组


function formatObjToArr(obj) {    if (!isObject(obj)) return [];    let options = [];    for (let i in obj) options.push({        name: obj[i],        key: i    });    return options;}

举个栗子 → ????????

formatObjToArr({1: 'Jack', 2: 'Tom'}) // [{name: "Jack", key: "1"},{name: "Tom", key: "2"}

23. 删除数组中的某个元素


function removeArr(arr, val) {    let index = arr.indexOf(val);    if (index > -1) arr.splice(index, 1);    return arr;}

举个栗子 → ????????

removeArr([1,2,3,4,5,6,7,8],4) //  [1, 2, 3, 5, 6, 7, 8]

24. 数组去重


function uniqueArr(arr) {    return Array.from(new Set(arr));}

举个栗子 → ????????

uniqueArr([1, 2, 1, 3]) //[1, 2, 3]

25. 图片下载


注: 在微信自带的游览器中不反对,微信会拦挡,能够应用微信的JS-SDK。 服务器端须要设置容许跨域:access-control-allow-origin: *

function downImage(imageSrc, name) {    let image = new Image();    // 解决canvas 跨域问题     image.setAttribute('crossOrigin', 'anonymous');    image.onload = function() {        let canvas = document.createElement('canvas');        let context = canvas.getContext('2d');        canvas.width = image.width;        canvas.height = image.height;        context.drawImage(image, 0, 0, image.width, image.height);        let url = canvas.toDataURL('image/png'); // 图片编码数据        let a = document.createElement('a');        let event = new MouseEvent('click'); // 创立一个单击事件        a.download = name || 'image'; // 设置图片名称        a.href = url; // 将生成的URL设置为a.href属性        a.dispatchEvent(event); // 触发a的单击事件        a = null,canvas = null;    }    image.src = imageSrc;}

举个栗子 → ????????

downImage('https://bkimg.cdn.bcebos.com/pic/94cad1c8a786c9179e80a80cc23d70cf3bc75700?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2U5Mg==,g_7,xp_5,yp_5')

26. js 深度拷贝


function deepCopy(obj, cache) {    if (cache === void 0) cache = [];    if (obj === null || typeof obj !== 'object') {        return obj    }    let copy = Array.isArray(obj) ? [] : {};    // 设置缓存,用于上面递归援用    cache.push({        original: obj,        copy: copy    });    Object.keys(obj).forEach(function(key) {        copy[key] = deepCopy(obj[key], cache);    });    return copy}

举个栗子 → ????????

let obj = {    id: 1,    name: 'fishStudy520',    data: [],    getName: function() {        return this.name    }}deepCopy(obj); 

27. 获取验证码倒计时


function getCode(time) {    let setInter = null,        codeText = '';    setInter = setInterval(() => {        if (time < 1) {            clearInterval(setInter);            codeText = '获取验证码';        } else {            codeText = `已发送${ time }s`;            time--;        }           }, 1000);    }

举个栗子 → ????????

getCode(5)

28. 将手机号码4-7位转换成 *


function replaceMobile(mobile) {    return Number.prototype.toString.call(mobile).replace(/1(\d{2})\d{4}(\d{4})/g,'1$1****$2');}

举个栗子 → ????????

replaceMobile(18000009999) //"180****9999"

29. 封装繁难的ajax 申请


function request(obj) {    return new Promise(function(resolve, reject) {        let { url, method = 'GET', params = {}, isAsync = true } = obj;        method = method.toUpperCase();        let xhr = new XMLHttpRequest(); // 创立一个 XMLHttpRequest对象        if (method === "POST") {            xhr.open(method, url, isAsync);            xhr.setRequestHeader('Content-type', 'application/json'); // json 数据格式(已json数据格式为例)            xhr.send(JSON.stringify(params)); // json 字符串        } else {            let paramsStr = formateObjToParamStr(params);            xhr.open(method, url + paramsStr, isAsync); //参数已url 形式传递            xhr.send();        }        xhr.onreadystatechange = function() {            if (xhr.status === 200 && xhr.readyState === 4) {                let response = JSON.parse(xhr.responseText);                resolve(response)            } else if (xhr.readyState === 4) {                reject({                    code: xhr.status,                    message: xhr.statusText                })            }        }    }).catch((e) => console.log(e))}

举个栗子 → ????????

// 以后我的项目里创立 data.json 文件{    "code": 200,    "data": [{            "id": 1,            "name": "JavaScript 高级程序设计第三版"        },        {            "id": 2,            "name": "JavaScript 权威指南"        },        {            "id": 3,            "name": "你不晓得的JavaScript《上》"        },        {            "id": 4,            "name": "你不晓得的JavaScript《中》"        },        {            "id": 5,            "name": "你不晓得的JavaScript《下》"        }    ]}// 函数调用(async function getRequestList() {    let res = await request({        url: 'data.json',        method: 'GET',    });    console.log(res);})();// 间接调用request({ url: 'data.json', method: 'GET',}).then(res=> {    console.log(res)})

30. 数值后面加 0


val: 数字
size: 长度

function addZero(val, size) {    for (let i = 0, len = size - (val + '').length; i < len; i++) {        val = '0' + val;    };    return val + '';}

举个栗子 → ????????

addZero(20,5) // "00020"

最初


如果喜爱那就点个赞呗(????????????)! (╯╰)(╯╰)(╯╰)