一、获取GET请求路径中的参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| const getQueryVariable = (url, variable) => { var vars = url.replace("?","&").split("&"); for (var i=0;i<vars.length;i++) { var pair = vars[i].split("="); if(pair[0] == variable){return pair[1];} } return(false); }
const getParameters = (url, variable) => { URL = JSON.parse( '{"' + decodeURI(url.split("?")[1]) .replace(/"/g, '\\"') .replace(/&/g, '","') .replace(/=/g, '":"') + '"}' ); return URL[variable]==null?false:URL[variable]; };
console.log(getParameters('http://xx.com?x=1&y=2','x')); console.log(getQueryVariable('http://xx.com?x=1&y=2','x'));
|
二、同步阻塞法实现sleep函数
1 2 3 4 5 6 7 8 9
| const sleep = delay => { const start = new Date().getTime(); while (new Date().getTime() < start + delay) { continue; }; }; console.log(1); sleep(3000); console.log(2);
|
三、利用 new URL 解析 URL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const parseURL = (url = '') => { const res = new URL(url); res.queryParams = key => { if (key) { return res.searchParams.get(key) }; const params = {}; const paramGroup = res.search.replace(/^\?/,'').split('&'); paramGroup.forEach(param => { const [key, val] = param.split('='); params[key] = val; }); return params; }; return res; }; parseURL('https://www.example.com/a/b?c=1&d=2');
|
四、一行代码实现星级评分
1 2
| const getRate = (rate = 0) => '★★★★★☆☆☆☆☆'.slice(5 - rate, 10 - rate); getRate(3);
|
五、用位运算提升效率
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| // | 取整 let num1 = 1.7; num1 = num1 | 0;
// >> 取半 let num2 = 6; num2 = num2 >> 1; // 3
// << 加倍
let num3 = 6; num3 = num3 << 1; / / 12
// ^ 交换值 let num4 = 10; let num5 = 20;
num4 ^= num5; num5 ^= num4; num4 ^= num5; // num4 === 2, num5 === 1
// & 判断奇数 let num6 = 10; let num7 = 11;
num6 & 1 === 1; // true num7 & 1 === 1; // false
// ~ 判断是否存在 const data = '123456'; const key = '3'; const keyIsExist = !!~data.indexOf(key); // true
// 是否 2 的整数幂 const isPowerOf2 = num => (num & (num - 1)) === 0; isPowerOf2(8) // true isPowerOf2(7) // false
|
六、判断是否是千分符字符
1 2 3
| const numberIsThousand = str => /^-?\d{1,3}(,\d{3})*(\.\d+)?$/.test(str); numberIsThousand('100,000,000,000') // true numberIsThousand('100,000,000,00') // false
|
七、复制文本到剪切板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| const copyToClipboard = content => { const clipboardData = window.clipboardData; if (clipboardData) { clipboardData.clearData(); clipboardData.setData('Text', content); return true; } else if (document.execCommand) { const el = document.createElement('textarea'); el.value = content; el.setAttribute('readonly', ''); el.style.position = 'absolute'; el.style.left = '-9999px'; document.body.appendChild(el); el.select(); document.execCommand('copy'); document.body.removeChild(el); return true; } return false; };copyToClipboard('hello world');
|
1 2 3
| const copyToClipboard = (text) => navigator.clipboard.writeText(text);
copyToClipboard("Hello World");
|
注意
:规范要求在写入剪贴板之前使用 Permissions API 获取“剪贴板写入”权限。但是,不同浏览器的具体要求不同,因为这是一个新的API。有关详细信息,请查看compatibility table and Clipboard availability in Clipboard。
八、一行代码生成指定长度的数组
1 2
| const List = len => [...new Array(len).keys()]; const list = List(10); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
九、判断数据类型
1 2 3 4 5 6 7 8 9 10 11 12 13
| const type = data => { let toString = Object.prototype.toString; const dataType = data instanceof Element ? 'element' // 为了统一DOM节点类型输出 : toString .call(data) .replace(/\[object\s(.+)\]/, '$1') .toLowerCase() return dataType };
type({}); // object
|
十、正则判断字符重复次数不超过两次
1 2 3 4
| const strIsRepeatThan2 = (str = '') => /^(?!.*(.).*\1{2})[\da-zA-Z].+$/.test(str); strIsRepeatThan2('123456'); // true strIsRepeatThan2('1234566'); // true strIsRepeatThan2('12345666'); // false
|
十一、正则匹配可以只有 0 但开头不能是 0 的数字
1 2 3 4
| const getCorrectNumber = (str = '') => /^(\d|[1-9]\d*)$/.test(str); getCorrectNumber('0'); // true getCorrectNumber('011'); // false getCorrectNumber('101'); // true
|
十二、获取浏览器Cookie的值
通过document.cookie 来查找cookie值
1 2 3
| const cookie = name => `; ${document.cookie}`.split(`; ${name}=`).pop().split(';').shift();
cookie('_ga');
|
十三、颜色RGB转十六进制
1 2 3
| const rgbToHex = (r, g, b) => "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
rgbToHex(0, 51, 255);
|
十四、检查日期是否合法
1 2 3
| const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf());
isDateValid("December 17, 1995 03:24:00");
|
十五、查找日期位于一年中的第几天
1 2 3 4
| const dayOfYear = (date) => Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24);
dayOfYear(new Date());
|
十六、英文字符串首字母大写
1 2 3
| const capitalize = str => str.charAt(0).toUpperCase() + str.slice(1)
capitalize("follow for more")
|
十七、计算2个日期之间相差多少天
1 2 3
| const dayDif = (date1, date2) => Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000)
dayDif(new Date("2020-10-21"), new Date("2021-10-22"))
|
十八、清除全部Cookie
1
| const clearCookies = document.cookie.split(';').forEach(cookie => document.cookie = cookie.replace(/^ +/, '').replace(/=.*/, `=;expires=${new Date(0).toUTCString()};path=/`));
|
十九、生成随机十六进制颜色
1 2 3
| const randomHex = () => `#${Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, "0")}`;
console.log(randomHex());
|
二十、数组去重
1 2 3
| const removeDuplicates = (arr) => [...new Set(arr)];
console.log(removeDuplicates([1, 2, 3, 3, 4, 4, 5, 5, 6]));
|
二十一、时间处理
1 2 3
| const timeFromDate = date => date.toTimeString().slice(0, 8);
console.log(timeFromDate(new Date(2021, 0, 10, 17, 30, 0)));
|
二十二、校验数字是奇数还是偶数
1 2 3
| const isEven = num => num % 2 === 0;
console.log(isEven(2));
|
二十三、求数字的平均值
1 2 3
| const average = (...args) => args.reduce((a, b) => a + b) / args.length;
average(1, 2, 3, 4);
|
二十四、回到顶部
1 2 3
| const goToTop = () => window.scrollTo(0, 0);
goToTop();
|
二十五、翻转字符串
1 2 3
| const reverse = str => str.split('').reverse().join('');
reverse('hello world');
|
二十六、校验数组是否为空
1 2 3
| const isNotEmpty = arr => Array.isArray(arr) && arr.length > 0;
isNotEmpty([1, 2, 3]);
|
二十七、获取用户选择的文本
1 2 3
| const getSelectedText = () => window.getSelection().toString();
getSelectedText();
|
二十八、打乱数组
1 2 3
| const shuffleArray = (arr) => arr.sort(() => 0.5 - Math.random());
console.log(shuffleArray([1, 2, 3, 4]));
|
二十九、检查用户的设备是否处于暗模式
1 2 3
| const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
console.log(isDarkMode)
|