https://juejin.im/post/5cc55eb5e51d456e577f93f0
在掘金看到这篇文章,里面有很多“邪门歪道”的JavaScript的技巧,对于我这种菜鸡还是挺有趣的。
创建过去七天的数组
// 创建过去七天的数组
[...Array(7).keys()].map(days => new Date(Date.now() - 86400000 * days))
把减号变为加号就是未来七天的数组
生成随机ID
ID包括数字或字母
Math.random().toString(36).subString(2)
为什么转36位呢?其实很简单,16位的10-16用A-F表示。当36位时的10-36用A-Z表示。subString是提取字符串的函数,接受两个参数,第一个是提前起始的index,第二是提取结束的jndex,默认为字符的结尾。
获取URL的查询参数
q={};location.search.replace(/([^?&=]+)=([^&]+)/g,(_,k,v)=>q[k]=v);q;
本地时间
// 创建本地时间
<body onload="setInterval(()=>document.body.innerHTML=new Date().toLocaleString().slice(10,19))"></body>
生成随机颜色
// 生成随机十六进制代码 如:'#c618b2'
'#' + Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0');
恶心的面试题
for(i=0;++i<101;console.log(i%5?f||i:f+'Buzz'))f=i%3?'':'Fizz'
生成键盘图案
尽管输出看看
// 用字符串返回一个键盘图形
(_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"].map(x=>(o+=`/${b='_'.repeat(w=x<y?2:' 667699'[x=["BS","TAB","CAPS","ENTER"][p++]||'SHIFT',p])}\\|`,m+=y+(x+' ').slice(0,w)+y+y,n+=y+b+y+y,l+=' __'+b)[73]&&(k.push(l,m,n,o),l='',m=n=o=y),m=n=o=y='|',p=l=k=[])&&k.join`
`)()
数组去重
我专门写了一篇博客介绍了十种去重方法,今天再介绍一种巧妙用布尔操作符进行计算
let arr = [1, 2, 3, 1, 1, 2, 3, 3, 4, 3, 4, 5]
let result = arr.reduce((prev, item, index, arr) => {
!prev.includes(item) && prev.push(item);
return prev
}, [])
console.log(result); //[1, 2, 3, 4, 5]
&& 操作符会检查第一个参数是否为true,当第一个操作数为false时,不会对第二个操作数进行求职。相反,如果第一个操作数为true时,则会对第二个操作数进行求值。